私は自分のプロジェクトでlibarchiveをしばらく使用してきましたが、うまく機能しています。現在、動的にリンクしているため、Windowsではlibarchive.dllファイルがシステムに存在する必要があります。ライブラリに静的にリンクしたいので、わざわざ DLL を配布する必要はありませんが、これを達成するのに本当に苦労しています!
現在、私のmakeファイルには次のようなものがあります: -Lpath/to//libarchive/ -larchive
これは機能しますが、動的リンクを行います。静的リンクを強制する方法がわかりません。
libarchive ディレクトリに libarchive.dll.a と libarchive_static.a の 2 つのファイルがあることがわかります。libarchive_static.a にリンクしたいのですが、これを指定できないようです。メイク ファイルで -larchive_static を実行すると、リンカー エラーが発生します。
Windows の静的ライブラリは lib ファイルであるという印象を受けましたが、libarchive をビルドすると、そのようなファイル タイプは得られません。
libarchive から .lib ファイルを作成するにはどうすればよいですか。また、追加の質問として、 aファイルとlibファイルの違いは何ですか?
アップデート
libarchive に静的にリンクするには、make のライブラリ コマンドに以下を含める必要があります。
-Lpath/to//libarchive/ -larchive_static
これは libarchive_static.a ファイルにリンクします。ただし、コードで LIBARCHIVE_STATIC も定義する必要があります。
ここでの問題は、libarchive が bzip2 ライブラリ (および他のライブラリ) に依存していることです。それらの静的ビルドがない場合、次のようなリンカー エラーが発生します。
`BZ2_bzCompressInit' への未定義の参照
libarchive コマンドの後に、依存ライブラリの静的ビルドとリンカーへの同様のコマンドが必要です。
-Lpath/to/bzip2/ -lbzip2
ソースから bzip2 をビルドするか、簡単な方法でビルド済みのバイナリを Gnu32Win プロジェクトから入手できます: http://gnuwin32.sourceforge.net/packages.html