我目前正嘗試在SPARC S7服務器上使用Oracle Linux 6 OS來運行NPB基準(支持OpenMP多線程)。操作系統預裝gcc 4.4.7
,這是缺少Niagara 7優化。我從Oracle Yum Repository下載了devtoolset-3
,其中gcc 4.9.2
安裝在/opt/rh/devtoolset-3/root/usr/bin
中。但是,當我使用較新的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
);沒有一種方法工作:如何鏈接來自多個位置的庫(對應於多個GCC版本)?
-Xlinker -rpath=lib_location
-Wl -Bstatic
-L lib_location
我使用-Wl -Bstatic ~/libgomp.a
或-static -L ~/libgomp.a
時是最接近的。它無法找到駐留在默認gcc lib文件夾(usr/lib
)中的庫,如libm
。
用於鏈路的實際命令是:
/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
有沒有一種方法,我可以從gcc 4.9.2
而從gcc 4.4.7
連接剩餘庫鏈接不僅僅是libgomp
庫?
通常情況下,您將設置PATH以將包含gcc的所需目錄置於系統之前,並將LD_LIBRARY_PATH置於相應的/ lib64 /(假設爲64位gcc)。 – tim18
你能詳細點嗎?但是,我嘗試導出LD_LIBRARY_PATH並將'/ opt/rh/devtoolset-3/root/usr/lib /'添加到路徑中,但這不會改變鏈接器對庫的使用。它仍然使用默認庫,當執行結果程序時會導致段錯誤。 –