アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

> dllを作るには、ヘッダーファイルの記述に何か特別なものが必要ですか?



これは、Windows で DLL を作成するときの __declspec(dllimport) なんかを
想定した質問でしょうか?

一般的な unix 系では、特に必要ありません(「私が見たことが無い」という
方が正確な表現ですが)。

DLL に入れておきたいオブジェクトファイルを用意しておいて、

% gcc -G -o aaa.so aaa.o

という感じです。

ar コマンドで作成されるアーカイブとは違って、DLL は「リンクされたもの」
ですから、必要なオブジェクトファイルが増減したときには、追加・削除では
なく、常に再リンクをすることに注意してください。


> また、できあがったdllを使う側では、ヘッダーファイルをインクルードして
> LIBパスの通ったところにdllを入れておけば良いのでしょうか?

DLL を探すのは、LD_LIBRARY_PATH という環境変数を使います。DLL の置き場所
をそれに追加しておく感じになります。

  ※ でも、本当はいろいろと細かいことがあります。とりあえず ld の man が参考になると思います。
    • good
    • 0
この回答へのお礼

くまさん、またまたありがとうございます。
知りたかったのは、

>DLL に入れておきたいオブジェクトファイルを用意しておいて、
>% gcc -G -o aaa.so aaa.o

という部分です。
早速やってみます。
ところで、この出来上がったDLLはJAVAアプリからも使用できますよね?
それって。。。。
また勉強しまーす!!ありがとうございました(*^_^*)

お礼日時:2001/10/01 11:21

> >% gcc -G -o aaa.so aaa.o



静的なアーカイブと同様に、libなんとか.so という名前にしておくと、
その DLL を使う方のプログラムのリンク時に -l オプションが使えます。

% gcc -G -o libaaa.so aaa.o

リンクする方では、

% gcc -o testX testX.cpp -laaa


> ところで、この出来上がったDLLはJAVAアプリからも使用できますよね?

またまた、蛇足をば。

(詳しくは知らないんですが)C++ で作ったクラスを、そのまま Java で
使えるんだ、という意味であれば *使用できません* 。

Native Interface というのを通して、Java 以外の言語で構築されたコードを
Java から、呼び出すことができます。

もし、情報の受け渡しが必要であれば、呼び出される Java 以外の言語で構築
されたコードの方で Java の型を意識したプログラムを書かないといけないです。
    • good
    • 0

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