دول مجلس التعاون الخليجي ودينار لا يمكن العثور على رموز تصدير ... لكنهم هناك

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

سؤال

ولدي C ++ مكتبة وتطبيق C ++ تحاول استخدام وظائف والطبقات المصدرة من المكتبة. المكتبة يبني الجميلة وتطبيق يجمع لكن فشل الارتباط به. الأخطاء أحصل على اتباع هذا النموذج:

<اقتباس فقرة>   

والتطبيق المصدر-file.cpp :( نص + 0x2fdb): إشارة غير محددة إلى `ليب-مساحة :: GetStatusStr (الباحث) '

ويبدو أن فصول في المكتبة التي يتعين حلها على ما يرام بواسطة رابط، ولكن وظائف خالية وتصدير البيانات (مثل جدول جيب التمام بحث) يؤدي دائما في الخطأ أعلاه.

وأنا أستخدم أوبونتو 8.04 (هاردي)، والأمر متروك الآن مع أحدث حزم أوبونتو.

والأمر لربط المكتبة هو (مع المكتبات الأخرى إزالتها):

g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so

والأمر لربط التطبيق (مع المكتبات الأخرى إزالتها):

g++ -fPIC -Wall -O3  -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question

وأخيرا، يبدو (قدر ما أستطيع أن أقول) أن الرموز في مسألة يتم تصديرها بشكل صحيح:

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
هل كانت مفيدة؟

المحلول

وعلى U قبل _ZN3lib-namespace12GetStatusStrEi في إخراج نانومتر يدل على أن الرمز هو على غير معروف في المكتبة.

وربما انها محددة في مساحة الاسم خطأ: يبدو أنك كنت تدعو في ليب-namepace ولكن هل يمكن أن تحدد في آخر

نصائح أخرى

ولقد كانت فترة من الوقت، ولكن إذا قمت بتحديد ليب مع الخيار -l، ثم لا يكون لديك تخطي بادئة ليب؟

و(لقد غيرت الاسم من "lib-in-question.so" إلى "libfoobar.so" لتسهيل القراءة للالمثال أدناه)

g++ -fPIC -Wall -O3  -L~/project/lib/release -lfoobar

أو

g++ -fPIC -Wall -O3  ~/project/lib/release/libfoobar.so
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top