我有一个复杂的程序,用于使用 Levenberg-Marquardt 方法拟合非线性函数。
该程序使用 Lapack 库中的线性方程系统求解器,我在其中使用过:
extern "C" ...
链接到外部 fortran 库。该程序在我的笔记本电脑上运行没有问题(使用 Ubuntu 12.04),我已经使用它进行测试一段时间了。
问题:
现在我搬到了大肥64核的电脑上,为了开始做一些真正的计算,电脑上有一个科学的linux 6。原来大电脑没有安装lapack,所以我弄了lapack 3.4.2,编译,然后按照这里的说明编译:
http://matrixprogramming.com/2011/04/using-lapack-from-c/comment-page-1
在那之后,我在我之前工作的 cmake 文件中完全没有改变,只是添加了链接选项:
-L/xdata/Compilers/Sources/lapack-3.4.2
现在我得到错误:
/usr/bin/ld: /xdata/Compilers/Sources/lapack-3.4.2/liblapack.a(dsytrf.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
仅作记录,我的 cmake 脚本到处都有 -fPIC 和 -fPIE ......我使用它的链接:
target_link_libraries(LibsModule -lgsl)
target_link_libraries(LibsModule -lgslcblas)
target_link_libraries(LibsModule -lrt)
target_link_libraries(LibsModule -lpthread)
target_link_libraries(LibsModule -pie)
target_link_libraries(LibsModule -fPIC)
target_link_libraries(LibsModule -L/xdata/Compilers/Sources/lapack-3.4.2)
target_link_libraries(LibsModule -lgfortran)
target_link_libraries(LibsModule -llapack -fPIC)
target_link_libraries(LibsModule -lblas -fPIC)
我做错了什么?请指教。
谢谢你。