6

GNU Autotools を使用して ZipArchive を使用する共有ライブラリを構築したいのですが、次の問題が発生しています。

警告: リンカー パスにライブラリ -lziparch の実際のファイルがありません。
そのライブラリがいつでも自動的にリンクされるようにする機能があります
このライブラリにリンクします。しかし、私はあなたが持っている場合にのみこれを行うことができます
あなたが持っていないように見えるライブラリの共有バージョン
開始するファイルを探してリンカーパスを確認したため
libziparch を使用し、ファイル形式のテストに合格した候補はありませんでした
ファイルマジックを使用。最後にチェックしたファイル: /usr/local/ZipArchive/ZipArchive/libziparch.a
ここで削除されたライブラリ間の依存関係は次のとおりです。
プログラムがこのライブラリにリンクされるたびに自動的に追加されます
またはそれを -dlopen するように宣言されています。

スタティック ライブラリをビルドした場合、または ZipArchive の共有ライブラリを使用した場合は機能しますが、問題は、ZipArchive ソース コードに付属する makefile がスタティック ライブラリのみをビルドすることです。

Libtool に静的ライブラリとのリンクを強制するにはどうすればよいですか?

4

1 に答える 1

5

通常、静的アーカイブは pic 以外のオブジェクト ファイルで作成され、共有ライブラリに配置することはできません。

ただし、このメッセージが伝えていることは、プログラムが Libtool を使用して YOUR ライブラリにリンクすると、その -lziparch がリンクに追加されるということです。したがって、インタープリター言語用のモジュールを作成する場合を除き、何も変更する必要はありません。その場合、ZipArchive を共有ライブラリとしてビルドする必要があります。さらに、これは、共有ライブラリ (DLL) がリンク時にすべてのシンボルを解決する必要がある MS Windows のようなプラットフォームでは機能しません。

つまり、ziparch 静的ライブラリが PIC コードの場合、ライブラリにリンクするときに -whole-archive フラグを使用できます。ただし、これは移植性の低いソリューションです。

于 2012-10-17T16:39:29.477 に答える