Tôi có một chương trình tinh vi để lắp các hàm phi tuyến với phương pháp của Levenberg-Marquardt.Lỗi liên kết Lapack, biên dịch lại với -fPIC
Chương trình sử dụng một người giải quyết cho một hệ phương trình tuyến tính từ thư viện LAPACK, nơi tôi đã sử dụng:
extern "C" ...
Để liên kết đến các thư viện fortran bên ngoài. Chương trình làm việc trên máy tính xách tay của tôi mà không gặp vấn đề gì (sử dụng Ubuntu 12.04), và tôi đã sử dụng nó để thử nghiệm một lúc.
Vấn đề:
Bây giờ tôi chuyển sang chất béo lớn máy tính 64-core để bắt đầu thực hiện một số tính toán thực tế, máy tính có một linux khoa học 6 trên đó. Hóa ra là các máy tính lớn không có LAPACK cài đặt, vì vậy tôi đã LAPACK 3.4.2, biên soạn nó, và theo các hướng dẫn từ đây để xây dựng nó:
http://matrixprogramming.com/2011/04/using-lapack-from-c/comment-page-1
Sau đó, tôi đã thay đổi hoàn toàn không có gì trong tập tin cmake của tôi mà làm việc trước đây, và chỉ cần thêm các tùy chọn kết nối:
-L/xdata/Compilers/Sources/lapack-3.4.2
Bây giờ tôi nhận được lỗi:
/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
Và chỉ dành riêng cho thành tích đó, kịch bản cmake của tôi là có -fPIC và -fPIE ở khắp mọi nơi ... Các liên kết Tôi sử dụng nó:
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)
Tôi đã làm gì sai? Xin cho biết.
Cảm ơn bạn.