首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何链接多个位置的库(对应于多个GCC版本)?

如何链接多个位置的库(对应于多个GCC版本)?
EN

Stack Overflow用户
提问于 2017-06-15 20:37:07
回答 2查看 257关注 0票数 2

我目前正尝试在SPARC S7服务器上使用OracleLinux6OS来运行NPB基准(支持OpenMP多线程)。操作系统预装了gcc 4.4.7,它缺少Niagara 7优化。我从Oracle下载了devtoolset-3,它在/opt/rh/devtoolset-3/root/usr/bin中安装了gcc 4.9.2。但是,当我使用更新的gcc编译NPB基准时,它会自动链接到与旧gcc 4.4.7相关的库(位于/usr/lib中)。这导致我的程序在执行过程中出现分段错误。我认为这是因为libgomp 4.4.7libgomp 4.9.2不兼容。我尝试过几种链接到gcc 4.9.2文件夹(即/opt/rh/devtoolset-3/root/usr/lib/gcc)中的库的方法;这些方法都不起作用:

  1. -Xlinker -rpath=lib_location
  2. -Wl -Bstatic
  3. -L lib_location

我得到的最接近的是在使用-Wl -Bstatic ~/libgomp.a-static -L ~/libgomp.a时。它无法找到驻留在默认gcc库文件夹( libm )中的库(如usr/lib)。

用于链接的实际命令是:

代码语言:javascript
复制
/opt/rh/devtoolset-3/root/usr/bin/gcc -O3 -fopenmp -mcmodel=medmid -static -L/opt/rh/devtoolset-3/root/usr/lib/gcc/sparc64-redhat-linux/4.9.2 -o ../bin/bt.W.x bt.o  initialize.o exact_solution.o exact_rhs.o set_constants.o adi.o  rhs.o x_solve.o y_solve.o solve_subs.o z_solve.o add.o error.o verify.o ../common/print_results.o ../common/c_timers.o ../common/wtime.o -lm -L/opt/rh/devtoolset-3/root/usr/lib/gcc/sparc64-redhat-linux/4.9.2/lib/
/opt/rh/devtoolset-3/root/usr/libexec/gcc/sparc64-redhat-linux/4.9.2/ld: cannot find -lm
/opt/rh/devtoolset-3/root/usr/libexec/gcc/sparc64-redhat-linux/4.9.2/ld: cannot find -lrt
/opt/rh/devtoolset-3/root/usr/libexec/gcc/sparc64-redhat-linux/4.9.2/ld: cannot find -lpthread
/opt/rh/devtoolset-3/root/usr/libexec/gcc/sparc64-redhat-linux/4.9.2/ld: cannot find -lc

是否有一种方法可以将libgomp库与gcc 4.9.2链接,同时将其余的库从gcc 4.4.7链接

EN

回答 2

Stack Overflow用户

发布于 2017-06-16 17:38:02

devtoolset编译器都在使用系统libgcc, libstdc++ 4.4.7版本,因此不能编译c++11。

我想gcc53-c++-5.3.0-1.el6.x86_64.rpm就行了。附带内部*/gcc53/lib64{libgcc_s.so**, libgomp.so**, libstdc++} (版本5.3.0) ..。提供/usr/bin/{ gcc53, g++53 }

这个包是一年前创建的..。测试良好,作为额外的编译器。下载链接:https://drive.google.com/file/d/0B7S255p3kFXNbTBneHgwSzBodFE/view?usp=sharing

票数 0
EN

Stack Overflow用户

发布于 2017-06-22 20:41:02

如果要执行-Wl,-Bstatic操作,请确保在添加了库参数之后,-Wl,-Bdynamic立即将其重置为正常。默认情况下,并不是所有的系统库都安装了静态版本,这就是您获得例如cannot find -lc的原因。

因此,您可以尝试将此作为您的解决方案的一个修改:

-Wl,-Bstatic ~/libgomp.a -Wl,-Bdynamic

不是很漂亮,这个问题应该得到一个更好的答案(这仍然是一个黑客),但它应该完成目前的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44576625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档