16

llvmを使用してパスを構築しようとしていますが、llvmとそれに関連するコンポーネントの構築が完了しました。ただし、 makefileを含むパスを作成するためのすべての手順を実行した後、makeを実行すると、次のようになります。

共有オブジェクトを作成する場合、「ローカルシンボル」に対する再配置R_X86_64_32は使用できません。-fPICで再コンパイルします

エラーメッセージをグーグルで検索して修正を見つけるのに苦労した後、これはllvmに固有のものではないことがわかりました。いくつかの解決策は、configureの実行中に「--enable-shared」を使用することを提案しましたが、それは私の場合には役に立ちませんでした。fPICエラーが示すように、今度はを使用してllvmを再構築したいと思います。しかし、makefileを使用してこれを行うにはどうすればよいですか?

4

3 に答える 3

12

シェル変数を設定することで、-fPIC(位置に依存しないコードの場合、任意のアドレスにロードできる共有ライブラリに必要なもの)を追加できるようです。

export CFLAGS="$CFLAGS -fPIC"
export CXXFLAGS="$CXXFLAGS -fPIC"

Makefile.rulesを見ると、これらが取得されて使用されます。そもそもそこになかったのは奇妙に思えます。

編集:

実際、makefileで詳細を読むと、LLVMMakefileガイドへのこのリンクが見つかりました。Makefile.rulesから、MakefileでSHARED_LIBRARY=1またはLOADABLE_MODULE=1(SHARED_LIBRARYを意味する)のいずれかを設定すると、コンパイラフラグに-fPICが配置されます。

于 2009-08-09T04:42:10.770 に答える
5

-fPICどこでも''を使用する必要があるとある程度確信している場合(または、より頻繁に必要な-m32''または' -m64')、'トリック'を使用できます。

CC="gcc -fPIC" ./configure ...

これは、Bourne / Korn / POSIX / Bashシェルを想定してgcc -fPICおり、configureスクリプトを実行する前に環境変数CCを''に設定します。これにより(通常)、すべてのコンパイルが指定されたフラグで実行されることが保証されます。コンパイルの正しい「苦味」を設定するために、これはあなたが見つける他のさまざまなメカニズムよりもうまくいくことがあります-使用するCコンパイラを指定したという事実を完全に無視することを除いて、コンパイルがそれをくねくねするのは難しいです。

于 2009-08-09T05:32:40.467 に答える
1

もう1つのオプションは、-fPICを直接渡して、次の方法で作成することです。

make CFLAGS='-fPIC' CXXFLAGS='-fPIC'
于 2012-10-16T16:43:02.880 に答える