ホームページ  >  記事  >  コンパイルされた C++ ライブラリ関数が見つかりません

コンパイルされた C++ ライブラリ関数が見つかりません

WBOY
WBOY転載
2024-02-08 23:57:19919ブラウズ

phpエディタのYouziがCプログラムを書いていると、「コンパイルされたCライブラリ関数が見つからない」という問題に遭遇することがあります。このエラーは通常、リンク段階で発生し、コンパイラが必要なライブラリ関数を見つけられないことを意味します。この問題には、ライブラリ ファイル パスの不適切な構成、ライブラリ ファイルの不適切なインストールなど、さまざまな理由が考えられます。この問題を解決するには、ライブラリ ファイルのパスを確認し、ライブラリ ファイルを再インストールし、コンパイラを更新することで問題を解決できます。この記事では、この一般的なコンパイル エラーを修正する方法を詳しく説明します。

質問内容

libmylibrary.a という名前のファイルと mylibrary.h# という名前のファイルがあります。 ## ヘッダー ファイル には、myfunction() という名前の関数が含まれています。これらを cpp ファイル (helloworldjni.cpp) と組み合わせて、native.dll という新しいライブラリを作成しました。しかし、jni を使用して Java で native.dll をコンパイルしようとすると、libmylibrary.a と mylibrary.h に関数が見つかりません。

mylibrary.h リーリー

これらは私が従った手順です

1. jni統合用Javaファイル(helloworldjni.java)を作成します

リーリー

2.このコマンドを使用して helloworldjni.h ファイルを作成します

リーリー

3. mylibrary.h ファイルと helloworldjni.h ファイルを cpp ファイル (helloworldjni.cpp) と統合します

リーリー

4. これらのファイルをコンパイルします (.o ファイルを作成します)

リーリー

5. .o ファイルを .dll ファイルに生成する

リーリー

6. helloworldjni.java

をコンパイルして実行します。 リーリー

次のエラーを受け取りました:

リーリー

libmylibrary.a の関数を確実に認識させるために、libmylibrary.a を Java コードのコンパイルに組み込むにはどうすればよいですか?

ps: 純粋な c を使用して myfunction() を呼び出すことができるので、libmylibrary.a には問題ないと確信していますが、jni を使用する場合は、理解できないある種のリンクの問題があるようです

回避策

いくつかの小さな変更を加えてすべての手順を試しましたが、うまくいきました。添付されたビルド スクリプト:

リーリー

ただし、注意すべき点がいくつかあります:

    Windows では、おそらくいくつかのマクロを設定する必要があるため、
  1. jniexport は実際には __declspec(dllimport)# ではなく __declspec(dllexport) になります ##Linux で
  2. *.so
  3. ファイルをリンクするには、-fpic を使用して c ファイル をコンパイルする必要があります。

以上がコンパイルされた C++ ライブラリ関数が見つかりませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。