問題タブ [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.
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
。
助言がありますか?
file - -fpic がアセンブリ ファイルで機能しない
LOCAL_CFLAGS を持つ android.mk ファイルを使用して共有ライブラリを構築しました:- -fPIC
ndk-build r10e バージョンを使用してビルドします。
アセンブリ ファイルには、arm11 アセンブリが含まれています。
eu-findtextrel ユーティリティで確認すると、再配置されたテキストがまだ表示されます。
アセンブリ ファイルに fPIC を適用する方法はありますか?
前もって感謝します。
tcl - エラー: ./configure && make package nap の試行時に -fPIC で再コンパイルしてください
tcl のインストール パッケージ nap6.4 を構成および作成しようとしていますが、「作成」中に次のエラーで失敗します。
そのため、ターミナルから次のように -fPIC で再コンパイルするように言われました。
しかし、これは機能しません。--disable-shared、make clean、および
CFLAGS の他の動作しないバージョンと一緒に。
-fPIC を使用して再コンパイルするにはどうすればよいのでしょうか。ここに欠けている特別な構文はありますか?
c - ARM flat pic バイナリの作成
データを含む位置相対コードを書きたいと思います。
つまり、printf の絶対アドレスを取得し、単純な文字列を出力する関数です。
パラメータ-fPICを指定してarm-none-eabi-gccを使用して ELF をコンパイルすることで、これを達成することができました。問題は、 objcopyを使用して ELF ファイルをフラット バイナリに変換することです。
objcopyは文字列をファイルの先頭に配置するため、関数の最後に文字列を残す代わりに、データが位置に依存しなくなり、プログラム カウンターによってアドレス指定されます。
何か不足していますか?objcopy が位置に依存しないデータでフラット バイナリを作成することは可能ですか?
編集:
添付の画像で、文字列が関数の最後ではなく関数の上の絶対アドレスにあり、PC によって指されていることがわかります。
c - この libtool リンク エラーを解決する方法
リンクに使用するコマンド:
エラー:
linux - 非PICオブジェクトをPICオブジェクトを含む実行可能ファイルにリンクすることは有効ですか?
常に実行可能ファイルに直接リンクされているいくつかのオブジェクト ファイルに、スレッド ローカル変数を追加しています。これらのオブジェクトは、共有ライブラリ内に含まれることはありません (これは近い将来にも当てはまると考えて間違いありません)。これは、これらのオブジェクトに -fPIC フラグが必要ないことを意味しますよね?
私たちのコードベースには、デフォルトですべてのオブジェクトの -fPIC フラグがあります。これらの多くは共有ライブラリに含まれているため、-fPIC の使用は理にかなっています。ただし、このフラグを使用すると、新しいスレッド ローカル変数のデバッグで問題が発生します。これは、 -fPIC を使用してスレッド ローカル変数をステップ オーバーしているときに GDB がクラッシュするためです。新しいスレッド ローカル変数を使用してこれらのいくつかのオブジェクト ファイルから -fPIC を削除すると、適切にデバッグできます。
非 PIC オブジェクトと PIC オブジェクトを実行可能ファイルに混在させても問題ないという正式な声明は見つかりません。これまでの私のテストでは問題ないことが示されていますが、コーシャとは感じられず、共有ライブラリのケースにより、オンラインでの議論は一般的に「PIC と非 PIC を混在させないでください」です。
この場合、非 PIC オブジェクトを PIC オブジェクトとライブラリで構築された実行可能ファイルにリンクしても安全ですか? これが安全であるというGCCドキュメントからの正式な声明があるかもしれませんが、私はそれを見つけることができません.
編集: このバグを回避するために gcc にバイナリ パッチを適用することは、短期的な解決策ではありません。Linux でコンパイラを切り替えることは、可能な解決策ではありません。
linux - 「-fPIC」フラグを使用して実行可能ファイルをコンパイルする (共有ライブラリなし)
私は現在、いくつかのレガシーパッケージに取り組んでおり、一部Makefile
の s が-fPIC
フラグを使用して最終的な実行可能ファイルをコンパイルしていることがわかります。
私の理解では、これは共有ライブラリを作成するときに使用され、実行可能ファイルを作成するときに使用しても意味がありません。
インターネットで検索すると、実行可能ファイルではなく共有ライブラリに関する結果しか得られないため、私が正しいのか、それとも何かが欠けているのだろうかと思います。
ありがとう、
linux - Linuxで-fPICをGCCに渡す方法
Linux で GCC 5.3 を使用して libedit をコンパイルしようとしていますが、不可解なエラー メッセージが表示されます。
recompile with -fPIC
ncurses または libedit は何を参照しますか? そして、どのように-fPIC
フラグを渡しますか。CFLAGS=-fPIC
の構成に追加しようとしましたncurses & libedit
が、まだ機能しませんでした。
-fPIC とは何かについての SO に関する投稿を多数見つけましたが、フラグの設定方法に関する投稿は見つかりませんでした。
ありがとうアート
thrift - -fPIC を使用して倹約を構築する方法
libthrift.a/libthriftnb.a を (so ファイルを直接使用するのではなく) 共有ライブラリにパックする何らかの理由があるため、-fPIC を使用してビルドする必要があります。
私はこのように倹約を構築します:
これを達成するにはどうすれば変更できますか?