2017-06-09 24 views
1

私は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プロジェクトに追加できますか?

答えて

0

JNIと共有ライブラリに対処する方法はこちらをご覧ください:

http://jnicookbook.owsiak.org/recipe-No-023/

あなたがする必要がどのようなJNIコードで使用されるものと共有ライブラリ(JNI)をリンクすることです。

次に、このライブラリにコードを提供したり、ユーザーがシステムに(パッケージなどを介して)インストールしてもらうことができます。

JNIで楽しんでください

+0

ここでは* .soライブラリがなく、別の* .cファイルがあります。全く違うのではないですか? – htshame

+0

この別のファイル "c/recipeNo023_AnotherFunction.c"は共有ライブラリとしてコンパイルされます。次に、 "c/recipeNo023_HelloWorld.c"がこの共有ライブラリにリンクされています。あなたはここで正確に何が起こっているか見ることができます:https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo023 – mko

+0

はい、申し訳ありません、私の悪い。私はCの総騒ぎです.2番目のコマンドを実行しようとすると、cc:error:認識できないコマンドラインオプション '-install_name'が表示されます – htshame

関連する問題