Компиляция агента JVMTI (с использованием GCC, на OSX Snow Leopard)

StackOverflow https://stackoverflow.com/questions/1420602

Вопрос

Я пытаюсь собрать агент 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top