問題タブ [fpic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
995 参照

makefile - caffe が -fPIC で再コンパイル libglog.a エラー

Debian に Caffe をインストールしようとしていますが、インストールすると次のmake allエラーが発生します。

/usr/bin/ld: /usr/local/lib/libglog.a(logging.cc.o): 共有オブジェクトを作成する場合、`.rodata' に対する再配置 R_X86_64_32 は使用できません。-fPIC で再コンパイル

/usr/local/lib/libglog.a: シンボルを読み取れませんでした: 値が正しくありません

collect2: エラー: ld が 1 の終了ステータスを返しました make: *** [.build_release/lib/libcaffe.so] エラー 1

-fPICフラグはどこに追加すればよいですか?では不十分だとも読みましたgflags

助言がありますか?

0 投票する
0 に答える
170 参照

file - -fpic がアセンブリ ファイルで機能しない

LOCAL_CFLAGS を持つ android.mk ファイルを使用して共有ライブラリを構築しました:- -fPIC

ndk-build r10e バージョンを使用してビルドします。

アセンブリ ファイルには、arm11 アセンブリが含まれています。

eu-findtextrel ユーティリティで確認すると、再配置されたテキストがまだ表示されます。

アセンブリ ファイルに fPIC を適用する方法はありますか?

前もって感謝します。

0 投票する
0 に答える
324 参照

tcl - エラー: ./configure && make package nap の試行時に -fPIC で再コンパイルしてください

tcl のインストール パッケージ nap6.4 を構成および作成しようとしていますが、「作成」中に次のエラーで失敗します。

そのため、ターミナルから次のように -fPIC で再コンパイルするように言われました。

しかし、これは機能しません。--disable-shared、make clean、および

CFLAGS の他の動作しないバージョンと一緒に。

-fPIC を使用して再コンパイルするにはどうすればよいのでしょうか。ここに欠けている特別な構文はありますか?

0 投票する
0 に答える
546 参照

c - ARM flat pic バイナリの作成

データを含む位置相対コードを書きたいと思います。

つまり、printf の絶対アドレスを取得し、単純な文字列を出力する関数です。

パラメータ-fPICを指定してarm-none-eabi-gccを使用して ELF をコンパイルすることで、これを達成することができました。問題は、 objcopyを使用して ELF ファイルをフラット バイナリに変換することです。

objcopyは文字列をファイルの先頭に配置するため、関数の最後に文字列を残す代わりに、データが位置に依存しなくなり、プログラム カウンターによってアドレス指定されます。

何か不足していますか?objcopy が位置に依存しないデータでフラット バイナリを作成することは可能ですか?

編集:

添付の画像で、文字列が関数の最後ではなく関数の上の絶対アドレスにあり、PC によって指されていることがわかります。

0 投票する
0 に答える
645 参照

c - この libtool リンク エラーを解決する方法

リンクに使用するコマンド:

エラー:

0 投票する
2 に答える
1462 参照

linux - 非PICオブジェクトをPICオブジェクトを含む実行可能ファイルにリンクすることは有効ですか?

常に実行可能ファイルに直接リンクされているいくつかのオブジェクト ファイルに、スレッド ローカル変数を追加しています。これらのオブジェクトは、共有ライブラリ内に含まれることはありません (これは近い将来にも当てはまると考えて間違いありません)。これは、これらのオブジェクトに -fPIC フラグが必要ないことを意味しますよね?

私たちのコードベースには、デフォルトですべてのオブジェクトの -fPIC フラグがあります。これらの多くは共有ライブラリに含まれているため、-fPIC の使用は理にかなっています。ただし、このフラグを使用すると、新しいスレッド ローカル変数のデバッグで問題が発生します。これは、 -fPIC を使用してスレッド ローカル変数をステップ オーバーしているときに GDB がクラッシュするためです。新しいスレッド ローカル変数を使用してこれらのいくつかのオブジェクト ファイルから -fPIC を削除すると、適切にデバッグできます。

非 PIC オブジェクトと PIC オブジェクトを実行可能ファイルに混在させても問題ないという正式な声明は見つかりません。これまでの私のテストでは問題ないことが示されていますが、コーシャとは感じられず、共有ライブラリのケースにより、オンラインでの議論は一般的に「PIC と非 PIC を混在させないでください」です。

この場合、非 PIC オブジェクトを PIC オブジェクトとライブラリで構築された実行可能ファイルにリンクしても安全ですか? これが安全であるというGCCドキュメントからの正式な声明があるかもしれませんが、私はそれを見つけることができません.

編集: このバグを回避するために gcc にバイナリ パッチを適用することは、短期的な解決策ではありません。Linux でコンパイラを切り替えることは、可能な解決策ではありません。

0 投票する
2 に答える
1155 参照

linux - 「-fPIC」フラグを使用して実行可能ファイルをコンパイルする (共有ライブラリなし)

私は現在、いくつかのレガシーパッケージに取り組んでおり、一部Makefileの s が-fPICフラグを使用して最終的な実行可能ファイルをコンパイルしていることがわかります。

私の理解では、これは共有ライブラリを作成するときに使用され、実行可能ファイルを作成するときに使用しても意味がありません。

インターネットで検索すると、実行可能ファイルではなく共有ライブラリに関する結果しか得られないため、私が正しいのか、それとも何かが欠けているのだろうかと思います。

ありがとう、

0 投票する
3 に答える
3139 参照

linux - Linuxで-fPICをGCCに渡す方法

Linux で GCC 5.3 を使用して libedit をコンパイルしようとしていますが、不可解なエラー メッセージが表示されます。

recompile with -fPICncurses または libedit は何を参照しますか? そして、どのように-fPICフラグを渡しますか。CFLAGS=-fPICの構成に追加しようとしましたncurses & libeditが、まだ機能しませんでした。

-fPIC とは何かについての SO に関する投稿を多数見つけましたが、フラグの設定方法に関する投稿は見つかりませんでした。

ありがとうアート

0 投票する
1 に答える
309 参照

thrift - -fPIC を使用して倹約を構築する方法

libthrift.a/libthriftnb.a を (so ファイルを直接使用するのではなく) 共有ライブラリにパックする何らかの理由があるため、-fPIC を使用してビルドする必要があります。

私はこのように倹約を構築します:

これを達成するにはどうすれば変更できますか?