【发布时间】: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/.bashrcexport LD_LIBRARY_PATH=$HOME/lib或export LD_LIBRARY_PATH=$HOME/lib64 -
如果您在
$HOME/.bashrc中设置了LD_LIBRARY_PATH,那么您将需要打开一个新终端以在其中运行程序,或者注销并重新登录以影响整个会话。跨度> -
是的,我忘了说我也设置了 LD_LIBRARY_PATH。