1

我正在尝试在 Snow Leopard 上使用 g++ 命令构建 JVMTI 代理,但出现以下错误:

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

未定义符号:“_main”,引用自:开始于crt1.10.6.o ld:
未找到符号 collect2:ld 返回 1 个退出状态

在 gcc 和 C++ 编程方面,我完全是新手,所以我不知道这个错误是什么意思。代理本身非常基础:

      #包括
      #包括

      JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
      {
          std::cout <<"加载方面..." <<std::endl;
          返回 JNI_OK;
      }

任何有关该消息的帮助将不胜感激。

4

1 回答 1

3

您提供给 g++ 的命令行选项告诉它您正在尝试构建可执行文件,而不是共享库。g++ 抱怨你没有定义一个main函数,因为每个可执行文件都需要一个。

使用 -c 标志编译您的共享库,以便 g++ 知道构建一个库,即编译和汇编您的代码,但不要尝试将其链接到可执行文件中。

g++ -c -o agent.so -I `/usr/libexec/java_home`/include agent.cpp
于 2009-09-14T10:44:56.250 回答