العثور على الرموز المفقودة في libstdc ++ على Debian/Squeeze
-
23-09-2019 - |
سؤال
أحاول استخدام مكتبة مسبقة مجسمة مقدمة كملف.
هذا الملف مرتبط ديناميكيًا مع بعض المكتبات:
$ ldd /usr/local/test/lib/libtest.so
linux-gate.so.1 => (0xb770d000)
libstdc++-libc6.1-1.so.2 => not found
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb75e1000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7499000)
/lib/ld-linux.so.2 (0xb770e000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb747c000)
لسوء الحظ ، في Debian/Squeeze ، لا يوجد ملف libstdc ++-libc6.1-1.so.*. فقط LIBSTDC ++. SO.* الملف المقدم من حزمة LIBSTDC ++ 6.
حاولت ربط (باستخدام ln -s) libstdc ++-libc6.1-1.so.2 إلى ملف libstdc ++. so.6. إنه لا يعمل ، يبدو أن مجموعة من الرموز غير موجودة عندما أحاول أن أتعامل مع ملفات .O مع هذا lib.
/usr/local/test/lib/libtest.so: undefined reference to `__builtin_vec_delete'
/usr/local/test/lib/libtest.so: undefined reference to `istrstream::istrstream(int, char const *, int)'
/usr/local/test/lib/libtest.so: undefined reference to `__rtti_user'
/usr/local/test/lib/libtest.so: undefined reference to `__builtin_new'
/usr/local/test/lib/libtest.so: undefined reference to `istream::ignore(int, int)'
ماذا كنت ستفعل ؟ كيف يمكنني أن أجد في أي ليب يتم تصدير هذه الرموز؟
المحلول
تقول Google أنك تحتاج إلى libstdc ++ 2.9-glibc2.1
http://linux.derkeiler.com/mailing-lists/debian/2005-07/0755.html
على الرغم من أنه من إصدار Debian عفا عليه الزمن ، ولست متأكدًا مما إذا كان من الجيد تثبيته.
تعديل
في الواقع جربته بدافع الفضول. لم يضر أي ضرر ويبدو أنه يتعايش بشكل جيد مع LIBSTC ++ القياسي.
debian:/home/dmitry# ll /usr/lib/\*stdc\* -rw-r--r-- 1 root root 256240 2000-02-19 17:41 /usr/lib/libstdc++-2-libc6.1-1-2.9.0.so lrwxrwxrwx 1 root root 30 2010-03-31 15:54 /usr/lib/libstdc++-libc6.1-1.so.2 -> libstdc++-2-libc6.1-1-2.9.0.so lrwxrwxrwx 1 root root 19 2010-01-21 10:13 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.13 -rw-r--r-- 1 root root 958628 2010-01-08 11:39 /usr/lib/libstdc++.so.6.0.13
wget http://archive.debian.org/debian/pool/main/e/egcs1.1/libstdc++2.9-glibc2.1_2.91.66-4_i386.deb
dpkg -i libstdc++2.9-glibc2.1_2.91.66-4_i386.deb
نصائح أخرى
جرب شيئًا على غرار:
`find /lib -type f | xargs nm | less`
ثم اصطياد ل istrstream
. هذا يمكن أن يكون بطيئا إلى حد ما.