Компиляция агента JVMTI (с использованием GCC, на OSX Snow Leopard)
-
07-07-2019 - |
Вопрос
Я пытаюсь собрать агент JVMTI с помощью команды g ++ на Snow Leopard и получаю следующую ошибку:
$ 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