• ベストアンサー

Unix上C++でのdllとインポートライブラリの関係

ranxの回答

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

a-kumaさんの回答でだいたい良いのですが、 > (1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普通ですか? これはUNIXの種類によります。SolarisやLINUXではその通りですが、HP-UXなどでは libxxx.shになったりします。 あとlibxxx.aは静的ライブラリです。-B dynamic というリンクオプションが無ければ こちらがリンクされます。-B static と明示的に指定することもできます。

orange_pie
質問者

お礼

は~。なるほど~。です。 ”.a”と言ったら一般的に静的だと思えばよいのですね。 それならばやはり”.so”です。 ちなみにSolarisでの開発なので、libxxxx.soと言う形にしました。 このようなルールって、厳密に決められている訳ではなくて ”通常、こうだよね”というような、経験者の方に聞かなければ分からないことが多いような気がします。 無事にdllを作成して、配布できるまでに至りました。 みなさんのおかげです。 本当にありがとうございました。

関連するQ&A

  • C++のdllの作り方を教えてください。

    こんにちは。 先週、「UNIXのC++で共通クラスを作りたい。」って言う質問をした orange_pieと申します。 そのバージョンアップ質問として、作成した共通クラスをDLLにして みんなに提供したいのですが、コンパイルはアーカイブを作る時と どう違うのでしょうか? ちなみに、コンパイルした後でarコマンドを使ってアーカイブを作っていました。 % gcc -c aaa.cpp % ar -r libaaa.a aaa.o dllを作るには、ヘッダーファイルの記述に何か特別なものが必要ですか? また、できあがったdllを使う側では、ヘッダーファイルをインクルードして LIBパスの通ったところにdllを入れておけば良いのでしょうか? どなたか教えてください。

  • DLLとインポート、エクスポート

    環境 Microsoft Visual C++ DLLはWin32 Dynamic-Link Library ExeはWin32 Application で作成しています。 DLLにメッセージボックスを表示するのみの処理の関数があり。 Exe側でその関数を使用したいだけです。 DLLのヘッダファイルにエクスポートしたい関数を _declspec(dllexport) void exportmain(); としています。 Exeではインポートを __declspec(dllimport) void exportmain(); としています。 プロジェクト⇒設定⇒リンクにlibファイルの設定もしています。 dll、libファイルの場所も問題ないと思います。 しかし、ビルドすると「外部シンボル~~未解決です」とエラーがでてしまいます。なにか原因がわかるかたおりましたら、ご教授お願い致します。

  • DLL作成について

    DLL作成の機会がいろいろ調べているのですが、教えていただきたいことがあります。 1.インポートライブラリについて  Windowsで暗黙的リンクでDLLをリンクする場合、  インポートライブラリを利用するようですが、  これは、DLL内のポインタと関数名を紐付けるような  役割だと想定しています。  仮に関数等ヘッダーで公開されている部分以外で  DLLを更新した場合、インポートライブラリも  再リンクするような場面があるのでしょうか。  特に再リンクしなくてもDLLの更新が反映されたので・・ 2.DLLのクラスの継承について  DLL内に作成したクラスを継承することは不可能ですかね。  DLLが更新された場合、インスタンスのイメージが違うため  newやdeleteの処理で当初リンクしたインスタンスのイメージで  行いますよね。

  • Linuxの動的ライブラリをMacで使いたい

    64bit Linux用に提供されたライブラリ(*.a, *.so)をMac(Snow Leopard)で使いたいと思っています。Mac環境でコンパイルをしたところ、リンク時に以下のwarningが出てしまいました。 ld: warning: in xxx.so, file is not of required architecture Webで調査し、gccのオプションに-arch i386 -arch x86_64を付けてみましたが解決できませんでした。そもそも、Linux用のライブラリをMacで使うというのは無理なのでしょうか?ご回答どうぞよろしく御願いいたします。

  • CのDLLをVC++でコンパイルしたいのですが、エラーになってしまいます。

    c言語の初心者なのですが、質問させて下さい。 javaからCのDLLを呼び出したく、 (下記のソースを書いたのですが、VC++でコンパイルすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と出てしまいます。 過去ログ等を見て、作成しているプロジェクトが悪いのかなと思い、 MFC appWizark(dll) win32 Application win32 Console Application win32 Dynamic-Link Library 等を作ってみてコンパイルしてみたのですが、駄目でした。 ちなみにDOSプロンプトで cl -IC:\j2sdk1.4.2_10\include\win32 -LD HelloWorl d.c -o HelloWorld.dll と実行するときちんとコンパイルできて、正常に実行も出来ました。 VC++でどうやればコンパイルできるのでしょうか? #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_printMessage (JNIEnv *env, jobject me) { printf("Helo World!!!\n"); return; }

  • C++BuilderやDelphiでVC++用のDLLの作成

    C++Builderの画面から新規作成からDLLウィザードを選ぶと、VC++スタイルのDLLを選択して作成できるようになっています。VC++用のDLLを作成出来るとは書かれていません。実際、VC++コンパイラからリンクを拒否されます。 また、VC++用のインポートライブラリをCOFF形式からBorland用のOMF形式に変換するユーティリティCOFF2OMF)は存在していますが、OMF形式をCOFF形式に変換する手法を見かけません。 変換方法を書いているWEBや雑誌記事とかを紹介してください。

  • バージョンの違うライブラリを適宜使い分けたい

    linux上にて、バージョンの異なるライブラリをインストールしております。このライブラリを用いて、コンパイル・実行をする際に、バージョンの違うライブラリを適宜使い分けたいのですが、どのようにすると効率的でしょうか? makeを使ってコンパイルしていますが、コンパイルの際に静的リンクを行うのが良いでしょうか?それとも、動的リンクにしておき、実行時にLD_LIBRARY_PATHを設定しなおして動かすのが良いでしょうか?あるいは、上記以外に方法があればアドバイスをもらえればと思います。

  • DLLについて

    VC++でDLLを作成しようとしているのですがいくつか判らない点があります。 1. スタティックライブラリとスタティックリンクライブラリの違い。この二つの用語の違いが分かりません。 2.VBからVC++で作成したDLLを使用するときには.libファイルは必要ないのでしょうか。使用しなくても、使うことができたので。

  • インポートライブラリ(.lib)ファイルについて

    インポートライブラリファイル(.lib)とは 何を行うファイルなのでしょうか。 外部DLLを使用可能にするためのファイルでしょうか。 libファイルの意味、使用方法を教えてください。

  • DLLの作りかた

    サンプルで配布されたアプリケーションのEXEファイルをDLL化して、自作するアプリケーション上で利用したいと思っています。 DLLってどうやって作成していくのでしょうか? 初心者にとって、この道は険しいでしょうか?