【问题标题】:Finding missing symbols in libstdc++ on Debian/squeeze在 Debian/squeeze 上的 libstdc++ 中查找缺失的符号
【发布时间】:2010-03-31 10:45:13
【问题描述】:

我正在尝试使用以 .so 文件形式提供的预编译库。

此文件与一些库动态链接:

$ 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++6 包提供的一个 libstdc++.so.* 文件。

我尝试将(使用 ln -s)libstdc++-libc6.1-1.so.2 链接到 libstdc++.so.6 文件。它不起作用,当我尝试使用此库 ld 我的 .o 文件时,似乎缺少一批符号。

/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)'

你会怎么做?我怎样才能找到这些符号是在哪个库中导出的?

【问题讨论】:

    标签: c++ linux linker debian dynamic-linking


    【解决方案1】:

    Google 说你需要 libstdc++2.9-glibc2.1

    http://linux.derkeiler.com/Mailing-Lists/Debian/2005-07/0755.html

    虽然它来自过时的 debian 版本,但我不确定安装它是否是个好主意。

    编辑

    其实我是出于好奇尝试过的。它没有造成任何伤害,并且似乎与标准 libstc++.so 很好地共存

    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

    【讨论】:

    • 感谢您的回答。但我确实同意:使用旧的和过时的 debian 版本中的 oldlib 是相当可怕的。
    【解决方案2】:

    尝试以下方式:

    `find /lib -type f | xargs nm | less`
    

    然后寻找istrstream。这可能会很慢。

    【讨论】:

    • 感谢 Marcelo 的想法,我认为这是查找符号的最佳方式(尽管我搜索的是 /usr/lib 而不是 /lib ;)。不幸的是,我找不到我正在寻找的符号。这很令人困惑。
    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多