こんにちは。
先週、「UNIXのC++で共通クラスを作りたい。」って言う質問をした
orange_pieと申します。
そのバージョンアップ質問として、作成した共通クラスをDLLにして
みんなに提供したいのですが、コンパイルはアーカイブを作る時と
どう違うのでしょうか?
ちなみに、コンパイルした後でarコマンドを使ってアーカイブを作っていました。
% gcc -c aaa.cpp
% ar -r libaaa.a aaa.o
dllを作るには、ヘッダーファイルの記述に何か特別なものが必要ですか?
また、できあがったdllを使う側では、ヘッダーファイルをインクルードして
LIBパスの通ったところにdllを入れておけば良いのでしょうか?
どなたか教えてください。
No.1ベストアンサー
- 回答日時:
> 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 が参考になると思います。
くまさん、またまたありがとうございます。
知りたかったのは、
>DLL に入れておきたいオブジェクトファイルを用意しておいて、
>% gcc -G -o aaa.so aaa.o
という部分です。
早速やってみます。
ところで、この出来上がったDLLはJAVAアプリからも使用できますよね?
それって。。。。
また勉強しまーす!!ありがとうございました(*^_^*)
No.2
- 回答日時:
> >% 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 の型を意識したプログラムを書かないといけないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
自作DLLってkernel32.dllやuser...
-
ファイルをvbaで圧縮したいので...
-
VC++2010でdllファイルの作成に...
-
ILMergeのエラーの原因と対策
-
[VBA]64b版-行数表示.dllの登録...
-
steamのゲームが起動しません。
-
VB6.0(SP6)にて開発を行なって...
-
C# ネット上に公開されているFF...
-
VBAエディタのコード画面で、カ...
-
res://ieframe.dll/について
-
python エラー
-
エクセルのエラーメッセージ「4...
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
デコンパイル?について
-
VBAを何回も作り直して、容量が...
-
[COBOL] ソースの復帰
-
1 つ以上の複数回定義されてい...
-
バッチからsqlplusの接続エラー...
-
パーサとコンパイラの違いって?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
res://ieframe.dll/について
-
ASP.NETのDLL入れ替えについて
-
VB6.0(SP6)にて開発を行なって...
-
WIN10で常にフォームを手前に
-
C# DLL エントリ ポイントが...
-
ファイルをvbaで圧縮したいので...
-
visual studioの不要なDll削除方法
-
手書き文字認識のdll
-
M365にアップデートしてからコ...
-
[VBA]64b版-行数表示.dllの登録...
-
VBAエディタのコード画面で、カ...
-
ベースアドレスの設定について
-
メイクファイルからdllを生成す...
-
VBからIMEパッドを呼び出す方法...
-
パソリからIDをVB6で読み込みた...
-
実行ファイルからソースファイ...
-
steamのゲームが起動しません。
-
APIの呼び出しDLLファイルの場...
-
指定された引数が有効範囲にな...
-
dllをいじる。。
おすすめ情報