我尝试在 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
关于java - 编译 JVMTI 代理(使用 GCC,在 OSX Snow Leopard 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1420602/