当前位置: 首页 > 面试题库 >

将g ++ 4.8链接到libstdc ++

乐正迪
2023-03-14
问题内容

我在运行64位Ubuntu 12.04的桌面上下载并构建了gcc 4.8.1。我像文档建议一样使用命令从源代码中构建它

../../gcc-4.8.1/configure --prefix=$HOME --program-suffix=-4.8
make
make -k check
make install

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

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


问题答案:

与自己的gcc链接时,您需要添加一个额外的运行时链接程序搜索路径,-Wl,-rpath,$(PREFIX)/lib64以便在运行时找到与您的gcc对应的共享库。

我通常在与我调用的目录相同的目录中创建一个包装器gcc,而不是和调用,而在动态链接器中找不到该包装器:g++``gcc-4.8``g++-4.8``gcc-4.8``g++-4.8

#!/bin/bash
exec ${0}SUFFIX -Wl,-rpath,PREFIX/lib64 "$@"

安装时SUFFIXPREFIX应将其替换为configure

cd ${PREFIX}/bin && rm -f gcc g++ c++ gfortran
sed -e 's#PREFIX#${PREFIX}#g' -e 's#SUFFIX#${SUFFIX}#g' gcc-wrapper.sh > ${PREFIX}/bin/gcc
chmod +x ${PREFIX}/bin/gcc
cd ${PREFIX}/bin && ln gcc g++ && ln gcc c++ && ln gcc gfortran

gcc-wrapper.sh是bash片段)。

上面的解决方案不适用于的某些版本,libtool因为它g++ -Wl,... -v采用链接模式,并因错误而失败。

更好的解决方案是使用specs文件。一旦构建了gcc / g ,请调用以下命令以将gcc / g

添加-rpath到链接器命令行中(${PREFIX}/lib64根据需要替换):

g++ -dumpspecs | awk '/^\*link:/ { print; getline; print "-rpath=${PREFIX}/lib64", $0; next } { print }' > $(dirname $(g++ -print-libgcc-file-name))/specs


 类似资料:
  • 问题内容: 我正在尝试让一个库在我的c 项目中工作,并且对于不习惯c 的人没有明确的说明 以下链接是我最近来的 它指出以下 还有以下线程指出以下内容 现在从我可以看到的命令是+ ,例如我的文件名是,这是正确的,有人可以澄清一下吗 我目前正在使用以下命令来编译我的文件,但是想包含一个名为.so的文件,例如 问题答案: 现在从我所看到的命令,例如我的文件名是这将是 不,那是不正确的。应该是,即您用来将

  • 问题内容: 我在main.storyboard上创建了一个UI元素,需要隐藏该元素,直到游戏结束,并且一旦玩家点击屏幕将其关闭即可。Main.storyboard链接到GameViewController,因此我所有的IBOutlet和IBActions都在其中,而我所有的游戏代码都在GameScene中。我如何将视图控制器链接到场景,以便弹出图像和按钮仅在游戏结束时出现。非常感谢您的帮助,我已经

  • 问题内容: 我在使g ++链接curl lib文件时遇到一些问题。我正在将Visual Studio 2017与linux dev插件和Ubuntu Server 17.04一起使用。 给出了输出,我尝试将其添加到中的链接器选项。我还将输出添加到了编译选项。这没有解决问题。 然后,我尝试从网站上获取源代码,并使用了make和make install。给了我不同的输出。我更改了链接器中的选项,但仍然

  • 我正在尝试使用Swing发出文件传输通知。这个想法是,当我的应用程序通过网络提供文件时,用户会收到一个,询问他或她是否想接受所述文件报价,如果他们的答案是是,我想打开一个,以便他们可以浏览到他们想要保存文件的位置。 我遇到的问题是两者单独工作都很好,但是当我设置它们以便打开我的应用程序死锁时。 有人知道这里出了什么问题吗?我尝试了调试,但没有发现任何奇怪的行为来表明它为什么会死锁。 编辑:下面的示

  • [Dean@dell_xps_13~]$C++--版本C++(GCC)6.2.1 201 60830版权所有(C)2016 Free Software Foundation,Inc.这是自由软件;有关复制条件,请参阅源代码。没有保修;甚至不是为了适销性或适合某一特定用途。 代码在test.cc文件中 首先将其编译为对象文件: 这可以运行并打印出一些消息: 现在使用-static选项获取错误 C++

  • 问题内容: 我已经从源代码构建了OpenSSL(一个有意的旧版本;使用来构建),并且更愿意使用我所构建的内容,而不用链接到我的程序。 失败的命令是: 并且我收到一系列类似于以下的错误: 这使我认为我的OpenSSL有点时髦。如果我从命令中省略,则错误变为无法执行以下操作: 我是否编译不正确的OpenSSL?还是我应该如何最好地解决这个问题? 问题答案: 愚蠢的“ Linux-isms”再次罢工!很