我目前正尝试在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.7与libgomp 4.9.2不兼容。我尝试过几种链接到gcc 4.9.2文件夹(即/opt/rh/devtoolset-3/root/usr/lib/gcc)中的库的方法;这些方法都不起作用:
-Xlinker -rpath=lib_location-Wl -Bstatic-L lib_location我得到的最接近的是在使用-Wl -Bstatic ~/libgomp.a或-static -L ~/libgomp.a时。它无法找到驻留在默认gcc库文件夹( libm )中的库(如usr/lib)。
用于链接的实际命令是:
/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链接
发布于 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
发布于 2017-06-22 20:41:02
如果要执行-Wl,-Bstatic操作,请确保在添加了库参数之后,-Wl,-Bdynamic立即将其重置为正常。默认情况下,并不是所有的系统库都安装了静态版本,这就是您获得例如cannot find -lc的原因。
因此,您可以尝试将此作为您的解决方案的一个修改:
-Wl,-Bstatic ~/libgomp.a -Wl,-Bdynamic
不是很漂亮,这个问题应该得到一个更好的答案(这仍然是一个黑客),但它应该完成目前的工作。
https://stackoverflow.com/questions/44576625
复制相似问题