私は、Levenberg-Marquardtの方法で非線形関数をフィッティングするための洗練されたプログラムを持っています。Lapackリンクエラー、-fPICで再コンパイル
プログラムは、私が使用している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)
は私が間違って何をしたのですか?お知らせ下さい。
ありがとうございます。