./configureの実行中にccshared = -fPICを設定するにはどうすればよいですか?
質問
Linking CXX shared library libqgispython.so
/usr/bin/ld: /usr/local/lib/python2.6/config/libpython2.6.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/python2.6/config/libpython2.6.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [src/python/libqgispython.so.1.0] Error 1
make[1]: *** [src/python/CMakeFiles/qgispython.dir/all] Error 2
make: *** [all] Error 2
このエラーからわかることは、 -fPIC
というフラグを付けてPython 2.6をビルドする必要があるということです。
わかりましたので、 configure.in
ファイルで見つけましたが、いくつかの条件をチェックし、それらの条件に基づいて -fPIC
を CCSHARED に割り当てますcode>フラグ。
すべての条件を確認した後、次の行を追加して、 CCSHARED
を -fPIC
として意図的に使用しました。
CCSHARED="-fPIC";
しかし、動作しませんでした。
設定中に CCSHARED
を -fPIC
に設定するように指定するにはどうすればよいですか?
解決
-enable-shared
でconfigureを実行します。次に、 -fPIC
が共有フラグの一部として含まれます。
他のヒント
このエラーに遭遇したとき、次のことがうまくいきました:
make clean
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC
CC = gcc -pthread
の後に -fPIC
を追加することで機能しました。
つまり、Makefileの CC = gcc -pthread -fPIC
です。
-
./ configure --help
を実行し、おそらくgrep PICにパイプして、これを有効にするオプションがあるかどうかを確認します - configureを実行する前に環境変数を設定してみてください。 CCSHARED =" -fPIC" ./configure(bashを想定した単一のコマンドとして)
どちらも機能しない場合は、設定コードを読み、テストする条件をよく理解する必要があります。
他の箇所で述べたように、-enable-sharedを指定してconfigureを実行すると、コンパイラフラグに-fPICが含まれるはずです。ただし、「シンボルを読み取れませんでした」というメッセージが表示される場合があります。 'make -j8'などを使用して並列ビルドを行おうとするとエラーになります。 RHEL 5.2でも同じエラーが発生しましたが、make呼び出しから「-j8」を削除した場合にのみ消えました...
それは CCFLAGS
ではないですか? (しばらくの間、世界のあの側ではなかった。)
でopensslを再構築しました ./config --prefix = / software / bea / openssl / 100c --openssldir = / software / bea / openssl / 100c / ssl shared -fPIC
そして、それはまた働きがありません。 / usr / bin / ld:リンクが失敗しました。 メイクファイルのリンク部分を変更しました 以前はgccでした-Wall -shared -o pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o des3crypt.o blowcrypt .o /software/bea/openssl/1.0.0c/lib/libcrypto.a
共有オプションと-fPICで再構築した後、libcrypto.aをlibcrypto.soに変更しました
gcc -Wall -shared -o pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o des3crypt.o blowcrypt .o /software/bea/openssl/1.0.0c/lib/libcrypto.so
それは機能しました
以下には、 fPICを渡す例があります。設定する