دول مجلس التعاون الخليجي ودينار لا يمكن العثور على رموز تصدير ... لكنهم هناك
-
03-07-2019 - |
سؤال
ولدي 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