تجميع وكيل JVMTI (باستخدام مجلس التعاون الخليجي، على OSX Snow Leopard)
-
07-07-2019 - |
سؤال
أحاول إنشاء وكيل JVMTI باستخدام الأمر g++ على Snow Leopard وأحصل على الخطأ التالي:
$ g++ -o agent.so -I `/usr/libexec/java_home`/include agent.cpp
رموز غير محددة:"_main"، مشار إليه من:ابدأ في crt1.10.6.o ld:لم يتم العثور على الرمز (الرموز)عاد دينار 1 حالة خروج
أنا مبتدئ تمامًا عندما يتعلق الأمر ببرمجة 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
لا تنتمي إلى StackOverflow