2011-10-21 37 views
1

この質問は確かにどこかで答えられますが、私はそれを見つけることができませんでした。私はJavaを10年以上にわたって開発してきました。私のC言語の経験はUnix上で行われていました。私のUnixエクスペリエンスでは、他の誰かがmakefileを書いていて、うまくいきました。.aファイルを.dllに変換する

私はfeepからlibtar-1.2.11のCソースコードをダウンロードし、cygwinの内部からmakeを実行しました。これにより、.aファイルと.exeファイルが作成されました。 EXEファイルは基本的にWindows上で動作するように見えますが、私が望むのは、ライブラリが自分のコードでファイルを読み込んで処理することでした。

正しく覚えていれば、それらは.aファイル(アーカイブ??)にあるはずです。これは私のC++プログラムから使用できるライブラリにリンクする必要があります。だから私はそれを行う方法を探しています。

私は.tgzファイルを使用するライブラリを作成していますので、このライブラリを使用します。私はlibtarをDLLにするだけでなく、自分でDLLを作成して他の言語で使用したいと思っています。

私の.aファイルを他のアプリで使用できるものにするにはどうすればよいですか?コード内からファイルにアクセスするにはどうすればよいですか?

+0

私は変換する機械に精通していません。 - > .dll。しかし、Windowsマシン上でソースコードをコンパイルして.dllを生成することはできます。 –

+0

'.a'ファイルを使ってDLLを作成することはできません。あなたはソースを直接操作します。 –

+1

@ MarkRansomが正しいです、あなたは再コンパイルする必要があります。 '.a'ファイルには通常、位置独立コード(PIC)が含まれていないので、コードを動的にリンクすることはできません。 –

答えて

4

生成されたlibmylib.aは、実際には、すべて*.olibtar-1.2.11のアーカイブです。
これを確認するには、nm libmylib.aを実行して、*.oファイルをすべて印刷します。
はあなたのコードを書く、とのリンク:

gcc -o my_application my_application.o -lmylib 

あなたはcygwinのでこれを生成し、あなたは私の知る限り、そのうちのDLLを生成することはできません。共有ライブラリを構築したいので

3

まあ、DLLがのと同じですが、(.aは、同等のWindowsが.LIBファイルされ、静的リンクするためのライブラリです)UNIXでライブラリを共有しました。実際

、あなたは結果libtar/libtar.exeが実際misnamed DLLになります

make LDFLAGS=-shared

として構築します。

しかし、Cygwinで翻訳されたDLLは、ネイティブのWindows DLLとは異なるもので、実行するCygwin DLL(およびインストールされているCygwin環境も)に依存するため、ネイティブでWindowsのコードでは、これはおそらくあなたが追求したいアプローチではありません。

libtarをデッド(2003年の最後のリリース)からlibarchive(ネイティブWindows build instructions)に切り替えることをお勧めしますか?

関連する問題