LINUXのGCCで,共有ライブラリを作成しようとしています。

ライブラリとして提供する関数の中で,エリアを new しているものがあるのですが,こうして作成したライブラリ(mytest.so.1.0)をアプリケーションから dlopen() で開こうとすると,
 Error of dlopen() : ./mytest.so.1.0: undefined symbol: _Znwj
となってしまいます。

この _Znwj というのがよくわからないのですが,nmコマンドでmytest.so.1.0
の情報を表示してみると,
    :
 00001e18 A _DYNAMIC
 00001dcc A _GLOBAL_OFFSET_TABLE_
  U _Znwj
 00001dc0 ? __CTOR_END__
 00001dbc ? __CTOR_LIST__
    :
となっており,確かに“未定義”として _Znwj というのが表示されます。

共有ライブラリの中で new を使用する場合は,なにか注意点などあるのでしょうか。
たとえば,コンパイルオプションでなにかを指定するとか・・

C/C++系の質問コーナーに発言するほうが良いのかもしれませんが,LINUX特有のことなので,こちらに質問しました。
ご存知の方,教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

_Znwj は /usr/lib/libstdc++.so.3 の中にあると思いますが、どうでしょう?


そっちを先に開いておけば良いように思いますが。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QライブラリとAPIについて

はじめまして。
すごく初歩的な質問ですが
誰かライブラリとAPIの違いを教えてください。
どちらもプログラムでよく使うものをまとめたものみたいですが両者の違いが分かりません。
またDLLはライブラリの一部なんでしょうか?

Aベストアンサー

> ここでまた疑問なんですがライブラリ(複数の関数)も
> API(1つの関数)も同じ関数ならAPIを入れなくても
> 直接アプリケーションとライブラリでできないんでしょうか。

ん?
APIは一つの関数とは限らないです。複数の関数を総称してAPIってこともあります。

ただの関数でも、アプリとのインターフェイスになるものはAPI(の一部)ですし、
インターフェイスの役をしない関数もあります。

関数そのものをAPIと呼ぶことも多いですが、必ずしも一致しません。
APIを実装(実現)する代表格が関数であって、関数=APIでもAPI=関数でもないです。

> 直接アプリケーションとライブラリでできないんでしょうか。

何ができないのかよく分かりませんが、APIってのは本質的には「取り決め」なので、
これがちゃんとしてないと、別の担当者になったときに困ったりします。

郵便局員の担当が「いつもの人」で互いに意思疎通できてれば多少のことはケアしてくれますけど、
別の担当になったとたんに話が通じなくなったり。(Interfaceが定まってない)
これが、応対マニュアルとか、申込用紙とか完備してきちんと取り決めがされていると、
別の担当者でも同じ手順で応対してもらえます。(Interfaceが定まっている)

APIってのは、「アプリケーションがこういうお願いをしたら、私はこういう応答をします」っていうお約束と、
それを実際にやってくれる担当者のことであって、関数は行員、ライブラリは郵便局。

APIがある利点というのは、利用者(アプリ)が郵便局内のごたごたとか業務フローを気にせずに、
窓口で決まった手順でお願いするだけで、誰が担当でもきちんと書留を送って貰える。
こういう、決まった手順をコミットして、何かをお願いすれば望む結果が返ってくると期待できるというところにあります。
これがばらばらだと、利用者が郵便局の支店ごとに別の手順を覚えるとか、窓口の担当者ごとに手順を確認するなどが必要になったりするのです。

> ここでまた疑問なんですがライブラリ(複数の関数)も
> API(1つの関数)も同じ関数ならAPIを入れなくても
> 直接アプリケーションとライブラリでできないんでしょうか。

ん?
APIは一つの関数とは限らないです。複数の関数を総称してAPIってこともあります。

ただの関数でも、アプリとのインターフェイスになるものはAPI(の一部)ですし、
インターフェイスの役をしない関数もあります。

関数そのものをAPIと呼ぶことも多いですが、必ずしも一致しません。
APIを実装(実現)する代表格が関数であ...続きを読む

Q起動時DRIVER_IRQL_NOT_LESS_OREQUAL(Smb_driver_sys)

先日ウインドウズ7から10にアップデートした時から起動時ブルーバックでこのメッセージが出るようになりました
対処法がわからず困っています。メッセージをなくす方法教えてください、よろしくお願いします。

Aベストアンサー

OSは違うかもしれませんが、同様のエラーメッセージに対して先日回答しています。
かなり残念な内容ですが、ご参考になれば。
https://oshiete.goo.ne.jp/qa/9067332.html

Q.NET FrameworkのAPIライブラリを見てもまったく使い方がわからない

.NET FrameworkのAPIライブラリを見てもまったく使い方がわからないのは、私がアホだからですか?

引数みたいなものが書かれていますが、どうやって持ってくるのかさっぱりわかりません。
自分がなさけなくなります。

Aベストアンサー

#2 Wizard_Zeroです。

> Application.Run(New DualWink())
ここがエラーになるのはクラス継承が正しく出来ていないから(つまり「Inherits Wink」がエラーだから)です。

> Inherits Wink
ここがエラーになるのは、既定クラスである「Wink」が存在していないか、参照できない名前空間にあるからです。

参考書は、手順どおりにコーディングすればエラーが発生しないように書かれているはずですから、どこか手順を飛ばしているか間違えているのでしょう。
手順どおりに行わなかったことで発生するエラーに関しては、参考書の著者は予想しようがありません。

Qプライベート・フォルダ1.0 (Private Folder 1.0)について

2006年7月5日にマイクロソフト社がフリーウェア・ソフトとして公開した「プライベート・フォルダ」について。

現在、Updateを欠かさず行っているWindowsXp上で利用しています。
今のところ特に問題もなく、正常に機能してくれています。

私と同じように、現在このソフトをご利用の方で、何かトラブルに遭遇された方がおられたら、どういう状態で発生したのか、原因が特定できていればその原因と、そうならないために考えられる予防策(あくまで使用する事を前提として、です)をお教えください。


補足
このソフトは、元々、一般家庭での使用を想定して公開された様ですが、業務に使用する場合、利用者にモラル上の問題があると、情報管理上の支障が発生する等のマイナスコメントが多く出され、公開から1週間足らずで公開停止になった、と聞いています。
任意のパスワードによってロックをかけ、パスワードを知らない他人(たとえ情報機器管理者でも)が絶対に開けられないフォルダを生成できるもので、ソフトそのものに問題はない、と聞いています。
しかし、このソフトの「おいたち」を考えると、たとえ軽いトラブルでも、フォローしてくれるところは無いだろうと思います。
そのため、欠かさずバックアップはとっています(じゃあ何のための秘密フォルダなんだ、と言われたらそれまでなんですが)。
英語版と露西亜語版しかなく、今、入手するのは非常に困難だそうです。

2006年7月5日にマイクロソフト社がフリーウェア・ソフトとして公開した「プライベート・フォルダ」について。

現在、Updateを欠かさず行っているWindowsXp上で利用しています。
今のところ特に問題もなく、正常に機能してくれています。

私と同じように、現在このソフトをご利用の方で、何かトラブルに遭遇された方がおられたら、どういう状態で発生したのか、原因が特定できていればその原因と、そうならないために考えられる予防策(あくまで使用する事を前提として、です)をお教えください。


補足...続きを読む

Aベストアンサー

トラブルと回避策・
「パスワード忘れでデータが取りだせない」→→【回避策:パスワードを忘れないようにする】



>>任意のパスワードによってロックをかけ、パスワードを知らない他人(たとえ情報機器管理者でも)が絶対に開けられないフォルダ
→うっかり「パスワードを忘れ中身が取り出せなくなった」程度なら「自己責任・わすれた本人が悪い」だけですが

>>今のところ特に問題もなく、正常に機能してくれています。
あなたのおっしゃるとおり
「ソフトそのものに欠陥があり、公開停止」に至った訳ではありませんから、既に持ってる人は問題なく使えるでしょう・・・。

【モラルのない人々によって「データ流出・交換の為の手段として悪用」の手段として好都合】←ここが問題だから、政治的圧力で公開停止になった。

「刃があるから、一揆が起こる・・・だったら、刃を廃止しましょう・・・(刀狩り令)」的発想ですよ。。

QAPIやマッシュアップ、クラスライブラリは英語力が必要不可欠でしょうか。

PHPやJavaScriptのプログラミングをしている者です。

AmazonやGoogle,Yahoo!が提供するAPIやクラスライブラリ(PEARを除Yahoo!UIなど)、マッシュアップはほとんど英語版ですよね。解説サイトも日本語はあまりありません。ほとんど英語版です。
ということは英語力が必要でしょうか?

Aベストアンサー

誰かが解説したり、邦訳を出してくれるまで待てるなら英語は読めなくても問題有りません。(日本語で解説しているサイトを読めばいいので)
ただ、間違った解説をしているところや、個人の主観が入ることがあるので、解説を読めばいいと言うわけではないです。
自動翻訳も然りですね。
誰かの解説を待てないなら、より正確な情報を知りたいなら、英語(原文)を読むしかないです。

英会話とか、リスニングは不要ですし、
試験をやってるわけではないので、単語がわからなければ辞書を引けばいいです。
訳してもカタカナで書いただけの単語は、コンピューター用語辞典などで調べ直せばいいです。

サンプルプログラムの関数がわからなければリファレンスを引くのと同じで、
まぁ、なんども出てくる単語はそのうち覚えます。

QAPACHEとTOMCAT連携が上手く行きません。(mod_jserv.so)

Redhat7.1でapache(1.3.12)とtomcat(3.2.3)の連携を行っていますが、ファイルクラッシュ?エラーメッセージが出てしまいます。
モジュールはjakartaサイトからダウンロードしてきました。
詳細は---
/etc/rc.d/init.d/httpd start
Starting httpd: [日付] [warn]Loaded DSO libexec/mod_jserv.so uses plain Apache 1.3 API,
this module might crash under EAPI!
(please recompile it with -DEAPI)
    [OK]
------
と表示されます。
”再度DEAPIと一緒にコンパイルしろ”と云う事なのでしょうが、ディレクトリ内を幾ら探してもそれらしいファイルは見つかりません。
[OK]が出ていると云う事は、上記以外は通っている事なのでしょうか?[FAILED]なら解りますが・・・。
どの様に復旧させれば良いのか、皆目見当が付きません。
ご存知の方、是非ご指導の程宜しくお願い申し上げます。
因みに、TOMCAT単体では稼動します。

Redhat7.1でapache(1.3.12)とtomcat(3.2.3)の連携を行っていますが、ファイルクラッシュ?エラーメッセージが出てしまいます。
モジュールはjakartaサイトからダウンロードしてきました。
詳細は---
/etc/rc.d/init.d/httpd start
Starting httpd: [日付] [warn]Loaded DSO libexec/mod_jserv.so uses plain Apache 1.3 API,
this module might crash under EAPI!
(please recompile it with -DEAPI)
    [OK]
------
と表示されます。
”再度DEAPIと一緒にコ...続きを読む

Aベストアンサー

いつも、お節介で、回答を書いていますが、回答したあとで、とんちんかんなアドバイスではなかった、間違ったことを言ってしまったのではいか、後悔しています。世間には、「何を言っているの?馬鹿な、いいかげんなことを言って」と、冷ややかな見方をされる方もおいでですが、困っているときはお互いさまです。

お答えする前には、少なからずそれなりの実機でのテストで、ある程度の確認をしてお答えしていますが、最近のApacheの経験がないので、アドバイスにあまり期待しないでください。
コンパイル済みのApacheが、使用しているLinuxでは、ダウンロードどした状態では使用できないようです。

エラーメッセージの内容は、DSO(Dynamic Shared Object) libexec/mod_jseerv.so(ソース・オブジェクト)が、plain(通常の)Apache1.3 APIを使用しているので、EAPI(Extended Applicaction Interface)のところで、クラシュしていることを表示しています。そのために、DEAPI-多分EPAIをDisableして、再度コンパイルすることを指示しています。多分、makeする際の、Makefileの定義のところだとは思いますが、どこかは、特定できません。
もし、場所がわかりましたら、再度、アップしましょう。

Apacheが起動したら、php言語ですね!

それでは、ご健闘を祈ります。

hogehoge ojin

いつも、お節介で、回答を書いていますが、回答したあとで、とんちんかんなアドバイスではなかった、間違ったことを言ってしまったのではいか、後悔しています。世間には、「何を言っているの?馬鹿な、いいかげんなことを言って」と、冷ややかな見方をされる方もおいでですが、困っているときはお互いさまです。

お答えする前には、少なからずそれなりの実機でのテストで、ある程度の確認をしてお答えしていますが、最近のApacheの経験がないので、アドバイスにあまり期待しないでください。
コンパイル済み...続きを読む

Qプログラミング言語のAPI

プログラミング言語の『API』にあたるものって具体的には何なのでしょうか?

例えば,C言語の場合『API』にあたるのはprintfやscanfなどの『標準関数全体』という解釈で合っているのでしょうか?


また,ライブラリとAPIの関係についても教えていただけると嬉しいです.

読んだ本の中で少し触れられていたのですが,表現が曖昧であまりよく分かりませんでした・・・.

Aベストアンサー

API というのは、もともと OS が用意しているシステムコールのことを差しています(「API システムコール」で検索すると、そういう説明をしているページが山のように見つかります。)。さきほど、20年ぐらい前の古い書籍まで含めてざっと書棚に目を通しましたが、一般の人に API という言葉が聞こえるようになったのは OS/2 のころです。それまでは MS-DOS も Unix も「システムコール」と呼ぶのが普通でした。(なぜ MS-DOS でシステムコールと呼んでいたのを OS/2 で API という名称に変えたのか、とかは省略します。類似の言葉にスーパーバイザーコール、というのもありますが、これも省略)

その後、コンピュータシステムは複雑になり、OS とアプリケーションプログラム、で完結する、という時代ではなくなってきます。いわゆる「ミドルウェア」が出現してくるわけですが、クライアント-サーバモデルで説明されることが多い「サーバ」側のプログラムを作成するためには、「サーバを呼び出す」必要が出てきたのです。(たとえば、データベースサーバ上にデータベースを構築するには、データベースサーバに「仕事を依頼」しなくてはいけません) これは、OS がもともと持っている「API」と似ている(プログラマからは区別ができない)ので、同じ「API」という言葉で呼ぶようになりました。つまり、「OS 以外のシステムが用意している機能をアプリケーションから呼び出す」という意味でも API という言葉が使われるようになったのです。(OS が持っている機能を使いたいから「OS に依頼する」のが API ですが、データベースサーバの機能を使いたいから「データベースサーバに依頼する」のも API でいいじゃないか、ってことです。データベースプログラムは OS から見ればひとつの「アプリケーション」に過ぎませんが、プログラマから見ればシステムの一部として「あらかじめ機能が提供されているかのように」見えます)

それから十年以上が過ぎて、Web や Java など、新しい機能が搭載されたオペレーティング環境が発明されました。Web や Java を作った人たちは、ネット上の Web サーバや Java の処理系を呼び出す仕組みを作ったのですが、この仕組みにも名前をつけないと人と話すときに不便です。(「今度作った Java の処理系の機能を呼び出す仕組みの xxx という部分なんだけどさ」「あー、うんうん、その Java の処理系の機能を呼び出す仕組みの xxx ってこないだ話してたやつだよね」「そーそー、その Java の処理系の機能を呼び出す仕組みの xxx を改良したんだけどね・・・」って、これでは落語のネタにはなっても、会話になりませんよね。やはり呼び名は必要です) そこで、ふと思いつきました。「自分のプログラムから他の機能を呼び出すことを API と呼んでいるんだから、これにも API と名前をつけてしまえ」 かくして、これらも「API」という名称で呼ばれることになったわけです。が、さすがにもともとの「API」とはあまりにかけ離れているので、「遠慮して」Web API とか Java API と、「形容詞」をつけたわけです。「端っこでいいから、仲間に入れてね」ってわけです。

「C 言語の API」というのは、正しいのか?
これはやはり一般的であるとは言い難いです。現在では API という意味がもともとの意味から拡張されて使われていますが、それでもなお「システム側がプログラムをする人たちのために用意している呼び出し方法」であることに変わりはありません。ですから、「C 言語の」というのが、「C 言語の一部であるところの」とか「C 言語に包含される」という意味であるのなら、「C 言語の API」という言葉は、やはりありません。API は「C 言語の外」であるシステム(OS とかサーバ)が用意しているものであり、C 言語はそれを「呼び出す」ことができるに過ぎません。もしかすると、呼び出されたシステムも「C 言語で書かれている」のかもしれませんが、それは結果論であり、システムを記述した言語が C であれ、Pascal であれ、マシン語を直接書いたのであれ、決められた呼出し手順(これを「API の仕様」と言います)にしたがって呼び出せば、C 言語からであろうと他の言語からであろうと、この API を利用することができます。つまり、呼び出す側からは呼び出されたシステムがどのように作成されたかはブラックボックスであり、内部的にどのように処理されているのかを気にせずに呼び出せるのが API です。呼び出されたシステムは所望の動作を行なったのち、呼び出したプログラムに戻ってきます。

・ プログラミング言語の『API』とは?

一般的に、この言葉は使われません。API はシステム側がプログラムのために用意している「呼び出し窓口」のことを指します。ですから、通常は「Unix の API」とか「Windows の API」というように、OS をはじめとするシステム側の名称に続いて使われる言葉です。最近ではサーバなど「広義のシステム」に属するものが増えているため、「データベースの API」という言い方もされていますが、本来の意味でのシステムは OS を指していたと理解するところから始めるとよいでしょう。

・ 例えば,C言語の場合『API』にあたるのはprintfやscanfなどの『標準関数全体』という解釈で合っているのでしょうか?

あっていません。printf などは「標準入出力関数」とか「標準入出力ライブラリ」と呼ばれることがありますが、これらは言語処理系を作成した人がプログラマのために用意するものです。一般的にこのような「有用なルーチンのかたまり」をライブラリと呼びますが、API とは呼びません。(ライブラリの効用は他にもありますが、話がそれてしまうので割愛します)

・ また,ライブラリとAPIの関係についても教えていただけると嬉しいです.

入出力などは、OS 側が用意しているものです。言語処理系で入出力が必要な場合、入出力ライブラリや入出力文を呼び出します。そのライブラリや入出力文ルーチンの中で API を呼び出して OS に入出力を依頼し、最終的にプログラマは入出力結果を見ることができます。ただし、「ライブラリ」の中には「算術ライブラリ」など入出力を伴わないものもあります。このようなライブラリを呼び出しても API は呼び出されないので、「ライブラリの内部では必ず API を呼び出している」とは言えません。

> 読んだ本の中で少し触れられていたのですが

以上の説明で、本の記載事項とうまくかみあうと思いますが、いかがですか?

API というのは、もともと OS が用意しているシステムコールのことを差しています(「API システムコール」で検索すると、そういう説明をしているページが山のように見つかります。)。さきほど、20年ぐらい前の古い書籍まで含めてざっと書棚に目を通しましたが、一般の人に API という言葉が聞こえるようになったのは OS/2 のころです。それまでは MS-DOS も Unix も「システムコール」と呼ぶのが普通でした。(なぜ MS-DOS でシステムコールと呼んでいたのを OS/2 で API という名称に変えたのか、とかは省略し...続きを読む

Qjavaws-1_2_0_01-linux-i586-i.zip

/usr/java/j2re1.4.1_01のなかに
javaws-1_2_0_01-linux-i586-i.zip
というものがありますがこれはいったいなんなのでしょうか?
ひらいてみるといろいろなファイルがみえます。
そのなかにinstall.shというものがありますがこれを
インストールするとどうなるのでしょうか?
インストールしてみようかとおもったのですが
インストールの方法がわかりません。
よろしくおねがいします。

Aベストアンサー

Java Web Startという機能です。
詳しくは下記URLを参考にしてください。

javaws-1_2_0_01-linux-i586-i.zipについて一番下に載っています
http://java.sun.com/j2se/1.4.1/ja/install-linux.html

Java Web Startについて
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jws/index.html
http://java.sun.com/products/javawebstart/ja/index_ja.html
http://www.utj.co.jp/XML/dev/java/dxjava_3.html

QDXライブラリの動作速度

DXライブラリというライブラリを使って小規模なをプログラムをしてきたのですが、ここで(まともな)シューティングゲームを作ろうと思いました。

そこで質問なのですが、60FPSで動作する2Dグラフィックの弾幕シューティングゲーム作成はDXライブラリでも十分な速度を得られるものなのでしょうか?
また、他に使いやすいライブラリやAPIはないでしょうか?

どなたか回答お願いします。

Aベストアンサー

★アドバイス
>DXライブラリでも十分な速度を得られるものなのでしょうか?
 ↑
 弾の管理(敵機も含む)を工夫して最適化すれば十分な速度が出せると思います。
 いままで小規模なプログラム(シューティング)を作成してきたようですが、
 弾の管理などはどうでしたか?
・もし、配列を使って空き領域をちまちまと検索してから弾の発生を
 管理していたのでれば弾幕系のシューティングでは遅くなります。
 データ管理のアルゴリズムをここでお勉強された方が良いでしょう。
 一般的には巨大なデータメモリ(メモリ・プール)を1つ用意して双方向リストという
 構造で独自に弾(敵機、アイテムなど)の構造体を確保、解放します。
 C言語標準のmalloc、freeやC++言語のnew、deleteではメモリの確保/解放に時間が
 かかってしまうかもしれません。なお、C++の場合はnew、deleteの演算子を
 オーバーロードできますので独自に管理したメモリ確保、解放をnew、deleteで
 記述できるように出来ます。(工夫次第)
>他に使いやすいライブラリやAPIはないでしょうか?
 ↑
 DXライブラリで十分だと思います。
 ご不満であれば自分で使いやすいクラス・ライブラリをお勉強をかねて作成して下さい。
 特に(まともな)シューティングゲームを作ろうと思っているのであれば
 シューティングゲームに特化したゲーム・システムを開発して使いまわせば
 さまざまなシューティングゲームが短期間で作成可能になります。
 時間があるのであれば挑戦してみることをお勧めします。

最後に:
・次のリンクをどうぞ。
 簡単な解説ですが参考になると思います。
 http://codezine.jp/a/article/aid/297.aspx→『本格的なシューティングゲームを実現するタスクシステム』
 ※解説&サンプルソースはC++で書かれています。
 ※DXライブラリもC++で作成されています。

参考URL:http://codezine.jp/a/article/aid/297.aspx

★アドバイス
>DXライブラリでも十分な速度を得られるものなのでしょうか?
 ↑
 弾の管理(敵機も含む)を工夫して最適化すれば十分な速度が出せると思います。
 いままで小規模なプログラム(シューティング)を作成してきたようですが、
 弾の管理などはどうでしたか?
・もし、配列を使って空き領域をちまちまと検索してから弾の発生を
 管理していたのでれば弾幕系のシューティングでは遅くなります。
 データ管理のアルゴリズムをここでお勉強された方が良いでしょう。
 一般的には巨大なデータ...続きを読む

Qssh_known_hosts について

SSH接続において初回接続時は登録されていないホストからの接続というメッセージが表示され、そのホストの情報が、ssh_known_hostsに登録されますが、
ある資料では、v1ではそこに登録され、v2ではssh_known_hosts2に登録されると書かれており、
ある資料では、RSA鍵がssh_known_hostsに、
DSA鍵がssh_known_hosts2に格納されると書かれています。
本当のところはどちらが正しいのでしょうか?
教えてください。

Aベストアンサー

前者が正しいようです。

ただし、参考URLの15.3.4節をみてもわかるように、最新のOpenSSHでは*2というファイルを使わなくなりました。

http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/custom-guide/s1-openssh-client-config.html

参考URL:http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/custom-guide/s1-openssh-client-config.html


人気Q&Aランキング