تجميع وكيل JVMTI (باستخدام مجلس التعاون الخليجي، على 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

رموز غير محددة:"_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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top