相关疑难解决方法(0)

将g ++ 4.8链接到libstdc ++

我在桌面上下载并构建了gcc 4.8.1,运行64位Ubuntu 12.04.我是根据文档推荐的源代码和命令构建的

../../gcc-4.8.1/configure --prefix=$HOME --program-suffix=-4.8
make
make -k check
make install
Run Code Online (Sandbox Code Playgroud)

它似乎通过了所有测试,并且我将所有内容安装到我的主目录中,后缀为-4.8,以区别于系统gcc,即版本4.6.3.

不幸的是,当我使用g ++ - 4.8编译c ++程序时,它链接到系统libc和libstdc ++,而不是从gcc-4.8.1编译的新程序.我下载并构建了gcc 4.8,因为我想在标准库中使用新的C++ 11功能,所以这种行为绝对不是我想要的.我该怎么做才能让gcc-4.8自动链接到它附带的标准库而不是系统标准库?

c++ linux gcc g++ libstdc++

9
推荐指数
2
解决办法
9425
查看次数

CentOS:从devtoolset使用GCC 4.7会导致错误地链接libstdc ++(未定义符号)

我正在使用CentOS 6.3的devtoolset-1.0来临时升级GCC版本。尽管我现在可以编译我的C ++应用程序,但最终的二进制文件缺少一些符号:

$ ldd -d -r myapp
$     [..]
$     libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003216e00000)
$     [..]
$ undefined symbol: _ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_    (./myapp)
$ undefined symbol: _ZNSt8__detail15_List_node_base7_M_hookEPS0_      (./myapp)
$ undefined symbol: _ZNSt8__detail15_List_node_base9_M_unhookEv (./myapp)
Run Code Online (Sandbox Code Playgroud)

我发现,这些是一些新功能,在旧的libstdc ++中找不到,但是在较新的libstdc ++中找不到。在我的系统上,同时安装了libstdc ++(默认版本4.4.7)和devtoolset-1.0-libstdc ++-devel(4.7通过devtoolset)。有趣的是,来自devtoolset的libstdc ++再次链接到旧的:

$ cat /opt/centos/devtoolset-1.0/root/usr/lib/gcc/x86_64-redhat-linux/4.7.0/libstdc++.so
$ /* GNU ld script
$    Use the shared library, but some functions are only in
$    the static library, so try that secondarily.  */
$ OUTPUT_FORMAT(elf64-x86-64)
$ INPUT ( /usr/lib64/libstdc++.so.6 -lstdc++_nonshared )
Run Code Online (Sandbox Code Playgroud)

我真正想要的是替换libstdc ++绑定,但是我不知道该如何实现。我已经尝试设置LD_LIBRARY_PATH并指向devtoolset目录,但是libstdc ++仍然设置为旧位置。另外,符号链接也没有成功,因为它是ld脚本而不是实际的共享库。

gcc centos undefined-symbol devtoolset

5
推荐指数
1
解决办法
3008
查看次数

在 CentOS 7 上构建时如何链接 devtoolset-7 中的 libstdc++?

我想devtoolset-7在 CentOS 7 上构建 C++11 应用程序。我正在尝试使用该库,但CentOS 7 本身包含的<regex>版本4.8.4不支持它libstdc++

我已按照以下说明安装并启用 SCL/ devtoolset-7

$ sudo yum install centos-release-scl
$ sudo yum install devtoolset-7
$ scl enable devtoolset-7 bash
Run Code Online (Sandbox Code Playgroud)

此时,如果我调用g++,它就是正确的版本 (7.2.1),但是当我构建应用程序并在它们上运行时,它们仍然动态链接到系统上的ldd旧版本。/lib64/libstdc++.so.6可靠链接的最简单方法是什么devtoolset-7-libstdc++-devel-7.2.1?我使用 CMake 3 作为构建系统。

g++ libstdc++ c++11 devtoolset centos7

5
推荐指数
0
解决办法
1492
查看次数

标签 统计

devtoolset ×2

g++ ×2

gcc ×2

libstdc++ ×2

c++ ×1

c++11 ×1

centos ×1

centos7 ×1

linux ×1

undefined-symbol ×1