質問

Snow Leopardでg ++コマンドを使用してJVMTIエージェントを構築しようとしていますが、次のエラーが表示されます:

$ g++ -o agent.so -I `/usr/libexec/java_home`/include agent.cpp

Undefined symbols: "_main", referenced from: start in crt1.10.6.o ld:
symbol(s) not found collect2: ld returned 1 exit status

私はgccとC ++プログラミングに関してはまったくの初心者なので、そのエラーの意味がわかりません。エージェント自体は非常に基本的です:

      #include 
      #include 

      JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
      {
          std::cout <<"Loading aspect..." <<std::endl;
          return JNI_OK;
      }

このメッセージに関するご意見、ご感想は大歓迎です。

役に立ちましたか?

解決

g ++に指定したコマンドラインオプションは、共有ライブラリではなく実行可能ファイルをビルドしようとしていることを示しています。 g ++は、すべての実行可能ファイルに main 関数が必要なので、定義していないと不平を言っています。

-cフラグを使用して共有ライブラリをコンパイルし、g ++がライブラリの構築、つまりコードのコンパイルとアセンブルを認識できるようにしますが、実行可能ファイルにリンクしないでください。

g++ -c -o agent.so -I `/usr/libexec/java_home`/include agent.cpp
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top