私はJavaアプリケーションに含めるfile.c
を持っています。 JNI
モジュールを作成し、nar-maven-plugin
でアプリケーションに組み込みました。ここでnar-maven-pluginを使って外部の.soライブラリをjniプロジェクトに追加する
はそれが設定だだ:私はmvn clean install
を実行した後
<plugin>
<groupId>com.github.maven-nar</groupId>
<artifactId>nar-maven-plugin</artifactId>
<version>3.5.2</version>
<extensions>true</extensions>
<configuration>
<libraries>
<library>
<type>jni</type>
<narSystemPackage>my.package.nativelib</narSystemPackage>
</library>
</libraries>
</configuration>
</plugin>
、それはlibmy-native-lib.so
ファイルを作成します。
私は、JavaからC関数に到達するために管理しますが、一つの問題があります:file.c
は(#include "external.h"
としてfile.c
に含まれている)外部libexternal.so
ライブラリを使用し、それがexternal.h
から任意の関数に到達したときには、「シンボル検索エラー」で失敗します。
私は
static {
System.load("/usr/lib/libexternal.so");
}
と
static {
System.loadLibrary("external");
}
を使用してみましたが、何も動作しているようだありません。
どうすれば外部* .soライブラリをJNIプロジェクトに追加できますか?
ここでは* .soライブラリがなく、別の* .cファイルがあります。全く違うのではないですか? – htshame
この別のファイル "c/recipeNo023_AnotherFunction.c"は共有ライブラリとしてコンパイルされます。次に、 "c/recipeNo023_HelloWorld.c"がこの共有ライブラリにリンクされています。あなたはここで正確に何が起こっているか見ることができます:https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo023 – mko
はい、申し訳ありません、私の悪い。私はCの総騒ぎです.2番目のコマンドを実行しようとすると、cc:error:認識できないコマンドラインオプション '-install_name'が表示されます – htshame