1
我一直在撓頭,超過一個星期,沒有回答我的問題。 我想構建R來自cran源與英特爾MKL1作爲共享庫。下面是我用它來測試我的配置小腳本:從源代碼構建R:指向共享庫的鏈接失敗
#! /bin/sh
export MKL=/opt/intel/compilers_and_libraries_2016.0.109/linux/mkl
MKL=" -L${_mkllibpath} \
-Wl,--start-group \
-lmkl_gf_lp64 \
-lmkl_gnu_thread \
-lmkl_core \
-Wl,--end-group \
-lgomp -lpthread"
./configure --prefix=/usr \
--libdir=/usr/lib \
--datarootdir=/usr/share \
rsharedir=/usr/share/R/ \
rincludedir=/usr/include/R/ \
rdocdir=/usr/share/doc/R/ \
--with-blas="${MKL}" \
--with-lapack \
--enable-R-shlib
make -j4
這個小腳本執行以下操作:在x86_64用gcc和gfortran
- 構建[R
- 構建R 2與GNU螺紋
- 導出英特爾MKL庫的路徑
- 將BLAS動態鏈接到英特爾MKL
現在我開始生氣的部分。 在一個系統上,的Archlinux,構建會讓我用下面的輸出LDD build目錄
$ ldd bin/exec/R
.....
libmkl_gf_lp64.so => /opt/intel/mkl/lib/intel64/libmkl_gf_lp64.so (0x00007f7707797000)
libmkl_core.so => /opt/intel/mkl/lib/intel64/libmkl_core.so (0x00007f7705c2a000)
libmkl_gnu_thread.so => /opt/intel/mkl/lib/intel64/libmkl_gnu_thread.so (0x00007f7704ed3000)
libimf.so => /opt/intel/lib/libimf.so (0x00007f7704814000)
libintlc.so.5 => /opt/intel/lib/libintlc.so.5 (0x00007f770284b000)
.......
這正是我期待的衝了進去。現在,與安裝在同一路徑上的英特爾MKL相同的腳本,運行在Fedora22上。
$ ldd bin/exec/R
linux-vdso.so.1 (0x00007ffe9a9c5000)
libR.so => /usr/lib64/R/lib/libR.so (0x00007f45d9b69000)
libgomp.so.1 => /lib64/libgomp.so.1 (0x00007f45d9947000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f45d972a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f45d936a000)
libblas.so.3 => /lib64/libblas.so.3 (0x00007f45d9111000)
libgfortran.so.3 => /lib64/libgfortran.so.3 (0x00007f45d8de5000)
......
正如所看到的,根本不是鏈接到英特爾MKL。
我玩過各種make選項,帶LD_PATHS,帶連接器選項等;我檢查了環境變量;我檢查過ldconfig緩存;等等。仍然無法與Fedora正確連接。
我將不勝感激任何提示,在哪裏尋找我的問題的根源。