./configureの実行中にccshared = -fPICを設定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/629961

  •  08-07-2019
  •  | 
  •  

質問

QGIS のPython 2.6をビルドしようとしています。 /en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux "rel =" noreferrer "> RHEL 5。 QGISの作成中に、次のエラーが表示されます。

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 フラグ。

すべての条件を確認した後、次の行を追加して、 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 です。

  1. ./ configure --help を実行し、おそらくgrep PICにパイプして、これを有効にするオプションがあるかどうかを確認します
  2. 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を渡す例があります。設定する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top