【问题标题】:compiling with local copy of gcc, incompatible libstdc++使用 gcc 的本地副本编译,不兼容的 libstdc++
【发布时间】:2014-11-19 00:13:23
【问题描述】:

我有一个与how to dynamically link to local copy of libc.so.6, libstdc++.so.6 on system with old version of gcc 中提出的问题非常相似的问题,我遵循了那里提供的答案。总而言之,问题在于我使用 C++11 编写了代码,并且集群系统管理员不会将 gcc 编译器升级到支持 C++11 的版本。我在我的主目录中手动安装了 gcc4.9(使用 --prefix=$HOME)。我使用以下标志编译我的代码:

-I/home/stroberg/include -L/home/stroberg/lib -lc -lstdc++ -llapack -lblas -O3 -std=C++11

我也设置了

export LD_LIBRARY_PATH=/home/stroberg/lib:$LD_LIBRARY_PATH

编译正常,直到进入链接阶段,我得到以下错误:

/usr/bin/ld: skipping incompatible /home/stroberg/lib/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /home/stroberg/lib/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /home/stroberg/lib/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /home/stroberg/lib/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /home/stroberg/lib/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: skipping incompatible /home/stroberg/lib/libgcc_s.so when searching for -lgcc_s

任何想法可能导致问题?我也在使用犰狳包(也是本地版本),这有什么不同。

谢谢。

【问题讨论】:

  • 根据我的经验,您不需要使用任何特殊标志来使用本地版本编译或链接程序,它应该自己找到所有这些东西。
  • 我可以确认删除 -lc-lstdc++ 标志不会改变任何事情。但是,问题仍然存在。
  • 在运行任何使用本地编译器构建的程序之前,我认为您需要将安装的 lib 文件夹添加到 LD_LIBRARY_PATH。您可以将其放在脚本中以启动程序或将其设置为 $HOME/.bashrc export LD_LIBRARY_PATH=$HOME/libexport LD_LIBRARY_PATH=$HOME/lib64
  • 如果您在$HOME/.bashrc 中设置了LD_LIBRARY_PATH,那么您将需要打开一个新终端以在其中运行程序,或者注销并重新登录以影响整个会话。跨度>
  • 是的,我忘了说我也设置了 LD_LIBRARY_PATH。

标签: c++ c++11 gcc


【解决方案1】:

我得到了它的工作,所以我想我应该发布我所做的。编译

-I$(HOME)/include -L$(HOME)/lib -lblas -llapack -lgsl -lglsblas -O3 -std=c++11

似乎成功了。希望我确切地知道是什么解决了这个问题,但我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多