レーベンバーグ・マルカート法で非線形関数をフィッティングするための洗練されたプログラムがあります。
このプログラムは、私が使用した 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)
私は何を間違えましたか?お知らせ下さい。
ありがとうございました。