2016-10-26 19 views
-1

私はすでにJNIについて研究していますが、どのように動作するのか分かりますが、JNIが呼び出す別のC関数からC関数を呼び出そうとしています。JNIが呼び出すCプログラムからC関数を呼び出すことはできますか?

私は2 .c、HelloWorldとHelloWorld2、そしてHelloWorldを呼び出すためのJavaプログラムを持っています。 HelloWorldは同時にHelloWold2で定義された関数を呼び出しますが、実行時にエラーが発生します。

次の2つのファイルを持っていると仮定すると

java: symbol lookup error: /home/hduser/Desktop/final2/libhello.so: undefined symbol: helloworld

+0

あなたがLD_LIBRARY_PATHをチェックしましたか? –

+1

ようこそ。 [ツアー](http://stackoverflow.com/tour)をご覧ください。 [What topic about about](http://stackoverflow.com/help/on-topic)と[よくある質問をする方法](http://stackoverflow.com/help/)をチェックしてみてください。ハウツー尋ねる)、[完璧な質問](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)、そして[最小、完全、検証可能な例](http://stackoverflow.com/help/mcve)。試したコードと受け取ったエラーを投稿してください。できるだけ具体的にすることで、より良い回答につながります。 –

+0

2番目の機能が問題であるとは思われません。 JavaからCコードを呼び出すときにすでに失敗しています。あなたはJavaからCコードを呼び出すことができましたか?あなたのコードを投稿してください。 – Codo

答えて

1

HelloWorld.c HelloWorld2.c

とのHelloWorldはHelloWorld2からあなたを何かを呼び出すことになっていることができます。

  • に両方を置きます同じ共有ライブラリ
  • 両方を別々の共有ライブラリに入れ、HelloWorldがHelとリンクしていることを確認してくださいloWorld2

LD_LIBRARY_PATHを設定することで共有ライブラリが表示されていることを確認してください。

あなたはここにいくつかのJNIサンプルを見つけることができます:http://jnicookbook.owsiak.org/

+0

どうすれば同じ共有ライブラリにそれらを置くことができますか? HelloWorldをHelloWorld2にリンクさせるにはどうしたらいいですか? System.loadLibrary()? JNIコードと呼ばれるから> - > JNI(呼び出すCコード) - Javaの: github.com/mkowsiak/jnicookbook/tree/master/recipeNo018 このサンプルでは、​​次の呼び出しを実行する方法を示しています。 – Tortxu13

+0

このサンプルを見てみましょうCで他のコードを呼び出してください。 github.com/mkowsiak/jnicookbook/tree/master/recipeNo021 このサンプルでは、​​両方のC関数を1つの共有ライブラリに入れています。 – mko

関連する問題