gpt4 book ai didi

c++ - Lapack 链接错误,使用 -fPIC 重新编译

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:31 28 4
gpt4 key购买 nike

我有一个用 Levenberg-Marquardt 方法拟合非线性函数的复杂程序。

该程序使用 Lapack 库中的线性方程组求解器,我曾在其中使用过:

extern "C" ...

链接到外部 Fortran 库。该程序在我的笔记本电脑(使用 Ubuntu 12.04)上运行没有任何问题,并且我已经使用它进行了一段时间的测试。

问题:

现在我搬到了胖乎乎的 64 核计算机上,以便开始做一些真正的计算,计算机上有一个 scientific 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)

我做错了什么?请指教。

谢谢。

最佳答案

解决方案是使用 -fPIC 重新编译 lapack 本身。因此,在您的 make.inc 中更改为以下内容:

FORTRAN  = gfortran -m64 -fPIC
OPTS = -O2 -m64 -fPIC
DRVOPTS = $(OPTS)
NOOPT = -O0 -m64 -fPIC
LOADER = gfortran -m64 -fPIC

您也可以使用 -O3 进行更好的优化,效果很好!

-m64 选项取决于您是否要使用 64 位系统。您的选择!

干杯!

关于c++ - Lapack 链接错误,使用 -fPIC 重新编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18828730/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com