問題タブ [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.
cmake - -fPIC Gentoo で再コンパイル
私は Gentoo を初めて使用し、CMake を使用して TexGen ( http://texgen.sourceforge.net/index.php/Main_Page ) と呼ばれる 3D モデリング プログラムをインストールしようとしていますが、エラーが発生し続けます。
これは次のステップで発生します。
cmakeのオプションファイルに -fPIC フラグをつけていろいろ調べてみましたが、結果に変化はありませんでした。私が言ったように、私は Linux と Gentoo にはまったく新しい (数週間程度) ので、どんな助けも大歓迎です。
c++ - -fPIC を含めて静的ライブラリをコンパイルすると、実行時にセグメンテーション違反が発生するのはなぜですか?
g++ で C++ スタティック ライブラリをコンパイルし、-fPIC オプションを使用しています。-fPIC オプションを使用する必要があります。これは、最終的にこのライブラリが他の静的ライブラリとリンクされて動的ライブラリを形成するためです。
スタティック ライブラリをローカルでテストすると、-fPIC オプションを含めなくても問題なく動作します。しかし、ライブラリを -fPIC でコンパイルするとすぐに、実行時に関数の 1 つを呼び出すと、セグメンテーション違反エラーが発生します。
-fPIC を含めて静的ライブラリをコンパイルすると、実行時にセグメンテーション違反が発生する理由は何ですか?
c++ - CMakeでライブラリの依存関係のPICバージョンにリンクするには?
CMake:
cpp-netlibに依存しています。
ビルドシステムの一部としてソースからビルドします。
cpp-netlib/CMakeLists.txt
:
1 つの特定のユース ケースでは、共有ライブラリで使用する必要があるため、-fPIC
有効にして 2 つ目のライブラリを作成しました。
私の共有ライブラリターゲットでは、次にリンクしますlibcpp-netlib_pic.a
foo/CMakeLists.txt
:
cpp-netlib
の非picバージョンに対してリンクしようとしているため、リンカーエラーが返されますboost_network
分解された名前:
ブーストビルド:
これはすべて、既存のビルド システムを boost-build から CMake に移行することの一部です。
ブーストビルド Jamfile は正常に動作します。
Jamroot
:
cpp-netlib/Jamfile
:
foo/Jamfile
:
これは機能します。
boost::network
にはサブフォルダーがありますがcpp-netlib/boost/library
、ヘッダーのみが含まれていますが、どこにも言及されていないことに注意してください。
質問:
cpp-netlib_pic
の pic バージョンを使用する必要があることを CMake に伝えるにはどうすればよいboost_network
ですか?
c++ - -fPIC でライブラリをビルドするように CMake を構成する方法は?
指定された静的ライブラリを作成しようとしてい-fPIC
ます。
これはうまくいきません。
ライブラリ ( ) は、フラグcpp-netlib_pic
なしでビルドされます。-fPIC
ただし、cpp-netlib_pic
doに対してリンクする他のターゲットは-fPIC
、コンパイラ フラグに追加されていますが、追加されていないため、リンクは失敗しますcpp-netlib_pic
。
ここfoo
に-fPIC
追加されます:
make VERBOSE=1 でこれを証明しました
ここに注意してください-fPIC
。
foo
を使用するターゲットをビルドするとcpp-netlib_pic
、次のように-fPIC
表示されます。
cpp-netlib_pic
で最初のライブラリ ( )をビルドするように CMake を構成するにはどうすればよい-fPIC
ですか?
cmake - CMakeList.txt で 32 ビット x86 プロセッサを検出しますか?
が不足しているため、CMake メイクファイルでエラーを検出しています-fPIC
。彼女は ci20 MIPS 開発ボードからのものです:
プロジェクトのポリシーは、レジスタのプレッシャーにより、32 ビット x86 を除くすべての場所で PIC を使用することです。つまり、x86_64、ARM-32、Aarch32、Aarch64、MIPS、MIPS64、UltraSparc などが PIC を取得します。
ターゲット プロセッサは で提供されていると思いますCMAKE_SYSTEM_PROCESSOR
。私が抱えている問題は、ドキュメントが値を教えてくれないことです。そのため、「32 ビット x86 ではない」テストを作成する方法がわかりません。
CMakeList.txt で 32 ビット x86 プロセッサを検出するにはどうすればよいですか?
さらに良いことに、CMake が設定するプロセッサの包括的なリストを確認したいと思いますCMAKE_SYSTEM_PROCESSOR
。誰かがリストを持っているなら、それを提供するのは素晴らしいことです.
c++ - g++ -fPIC が位置に依存しないコードを生成しない
だから私は自分のtestlib.cppを作成しました。
g++ -c -o testlib.o testlib.cpp として コンパイルし、 g ++ -fPIC -c -o testlib.o testlib.cpp としてコンパイルすると、testlib.o の対応する objdumps は同一です。
objdump -d testlib.o -M intel
また、-fPIC を指定してコンパイルした場合、 jumpおよびjeコマンドの引数のアドレスは位置に依存しないと予想していました。したがって、2 つの objdump は異なるはずです。私は何を間違って理解していますか?