错误的stdlib用于在FreeBSD 10上用g ++ 49编译的应用程序

时间:2015-04-05 17:37:58

标签: c++ gcc freebsd

我运行FreeBSD 10.1(使用clang堆栈,即libc ++,libcxxrt和朋友),我尝试使用 gcc 编译应用程序,但没有运气。

我已将我的C ++编译器设置为g ++ 49并且我已经验证了链接的stdlib正确地在/ usr / local / lib / gcc49中,但是当运行应用程序时,ld.so搜索libstdc ++。所以.6在/ usr / local / lib / gcc48中代替:

% ldconfig -r | grep libstdc++
        1118:-lstdc++.6 => /usr/local/lib/gcc48/libstdc++.so.6
        1142:-lstdc++.6 => /usr/local/lib/gcc49/libstdc++.so.6

导致这种情况发生:

/usr/local/lib/gcc48/libstdc++.so.6: version GLIBCXX_3.4.20 required by /usr/home/ryan/foobar not found

% ldd foobar
foobar:
        libstdc++.so.6 => /usr/local/lib/gcc48/libstdc++.so.6 (0x80081d000)
        libm.so.5 => /lib/libm.so.5 (0x800b26000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x800d4e000)
        libc.so.7 => /lib/libc.so.7 (0x800f5c000)

有没有人对如何永久解决这个问题有任何想法(即没有设置LD_LIBRARY_PATH)?

2 个答案:

答案 0 :(得分:0)

尝试安装

 /usr/ports/misc/compat6x

答案 1 :(得分:0)

您可以链接-rpath以在生成的可执行文件中设置运行时库路径。这与LD_LIBRARY_PATH的工作方式类似,不需要在环境中有任何特殊之处。