2

gcc が自動的に行うものと同一のライブラリを生成するように LibTools を説得するにはどうすればよいですか?

これは、明示的に行うと機能します。

gcc -o libclique.dylib -shared disc.c  phylip.c Slist.c  clique.c
cp libclique.dylib [JavaTestDir]/libclique.dylib

しかし、もしそうなら:

Makefile libclique.la (which is what automake generates)
cp .libs/libclique.1.dylib [JavaTestDir]/libclique.dylib 

Java はライブラリを見つけますが、エントリ ポイントを見つけることができません。

「automake スクリプトで共有ライブラリ (.so) を作成する方法」を読みました。スレッドとそれは大いに役立ちました。-shared フラグを使用して作成された dylib を取得しました (生成された Makefile によると)。しかし、Java Native Access から使用しようとすると、「シンボルが見つかりません」というエラーが表示されます。

Makefilelibclique.laによって生成された を調べると、重要な情報が含まれていないように見えます。リンクのオーバーロードであり、後続の C/C++ コンパイラの手順 (私にはありません) の便宜のために物事を移動しているように見えます。そのためlibclique.1.dylib、機能する動的ライブラリになると期待しています。

それが私が間違っているところだと推測していますが、JNAがdylibに直接リンクし、それでコンパイルされていないことを考えると(上記の議論の例によると)、それ以降のすべてのコンパイル手順は、 LibTools のマニュアルは意味がありません。

注: 私は Mac でテストしていますが、Windows と Linux マシンでもこれを行う必要があるため、これを Automake に入れようとしています。

注 2: 私は Java 開発に Eclipse を使用しています。はい、dylib をインポートしました。

ありがとう

4

1 に答える 1

2

プラグインを構築し、特にパスする必要があります

libclique_la_LDFLAGS = -avoid-version -module -shared -export-dynamic

このようにして、共有ライブラリではなく、動的にロード可能なモジュールが必要であることを libtool に伝えます (ELF の場合は同じですが、Mach-O の場合は異なります)。

于 2015-01-06T21:21:08.253 に答える