問題タブ [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.
c - 「ヘッダー ファイルが見つかりません」(エラーを起こす) と表示されるのはなぜですか?
構築中の Web サイトにジオコーダーをインストールしようとしています。Google Maps API のクエリ制限がニーズを満たしていないため、 Geocoderを使用しています。必要なすべての gem をインストールし、SQLite3 を使用しています。実際に geocoder gem (Geocoder::US) をインストールしようとすると、make ファイルの実行中にエラーが発生します。
わからないエラーが出ます。(タイトルで)エラーに言及し、存在しないファイル(sqlite3ext.h)について話します。エラーは次のとおりです。

これが漠然としていることはわかっていますが、これをインストールしようとして 10 時間以上作業しており、オンラインでほとんど助けが見つかりませんでした。どの方向に進むべきかについてのアドバイスをいただければ幸いです。
c - 非独立 C 動的ライブラリ (インクルード)、どの程度可能ですか?
プラグイン (共有ライブラリ) を追加できるようにするための一種の API を使用して、C で格闘ゲームをプログラミングしています。各プラグインは、ゲームをプレイできる一種の人工知能です。ゲーム中の各終了フレームで決定を下すことができます。私のプラグインはこのような構造になっています:
したがって、非指向オブジェクト言語でいくつかのオブジェクトを実装しようとしていることに気付きました。そのため、「void* me」は呼び出し元を識別する変数です。ヘッダーの取得は次のようになります。
私の Acquisition.c (一種の API 部分...) ファイルには現在、次のものが含まれています。
最後に、私の主なことは次のとおりです。
1 -> スペースを指すメインのローカル変数を設定するためのスペースの初期化 (ゲッターの使用)。(POINT ONE) 2 -> 構造体 Space のフィールド内でメモリの割り当てを行います。3 -> プラグイン bar.so で大量の dlopen を実行した後の getter のリコール (ポイント 2)
したがって、私はいくつかの無駄に冗長です:
位置に依存しないコードと位置に依存しないコードを混在させるのは悪いことだと思います!!!!!!!! 私は次のようにコンパイルを処理します:
わかりません: -fpic コードは非 -fpic コードにどの程度依存する可能性がありますか? この種のパターンでは、どのくらいの静的変数を使用できますか?
そして、Pure C でこの種の問題を設計する簡単で安全で良い方法はありますか? つまり、同じプログラムにいくつかの AI をプラグインする...
私の英語で、長くなってすみません...
gcc - -fPIC と -s の両方が使用されています - おそらく矛盾していますか?
特定のプロジェクトで、次のコンパイラ オプションが一度に使用されるのを見ました。
-fPICここで と を一緒に-s使用することは矛盾していますか? そうでない場合、なぜですか?
c++ - arm-linux の位置に依存しないコードで dladdr が実行可能ファイルへのパスを返すのはなぜですか?
Emdebian の g++-4.7 クロス コンパイラ for armhf を使用して arm-linux 用にクロスコンパイルしたコードの一部で、dladdr に関する問題が発生しました。問題は、dladdr に渡す関数ポインターが実行可能ファイル内でも呼び出される関数である場合、dli_fname は、シンボルの元の共有ライブラリではなく、実行可能ファイルへのパスを返すことです。
コンパイルされた例:
/usr/bin/arm-linux-gnueabihf-g++-4.7 main.cpp -o main -ldl -fPIC
結果: printf は ./main から取得されます
main() の本体を次のように変更すると
結果: printf は /lib/arm-linux-gnueabihf/libc.so.6 から取得されます
関数ポインターを dladdr に渡す関数が実行可能ファイル内で呼び出された場合、次の行に沿ったエントリがあることに気付きました
実行可能ファイルの .rel.plt セクションに作成されます。dladdr は、GOT を通じて見つけられる libc.so.6 からの正しいアドレスではなく、PLT から printf のこのアドレスを見つけているようです。dladdr のマニュアル ページでは、コードを位置に依存しないようにコンパイルするとこれが修正されるはずですが、このコンパイラではそうではないようです。参考までに、上記の同じコードは、g++-4.7 を使用する x86_64 Linux で期待どおりに動作します。
cross-compiling - ライブラリのクロスコンパイルからデフォルトの -fpic フラグを削除
SConstruct での環境のセットアップは次のとおりです。
それにもかかわらず、scons は -fPic パラメーターをコンパイルに追加します。
scons にはクロスコンパイル機能がないため、「強制オン」コンパイラ パラメータを削除したいと思います。
このツールのバージョン 2.3.4 を使用しています。
python - Python から -fPIC なしでコンパイルされたライブラリへのアクセス
Linux 上の Python からアクセスしたいクローズド ソースの x86_64 ライブラリがあります。
私は通常、これに ctypes を使用します。
ただし、このライブラリはアーカイブ (*.a) ファイルとして提供されます。ライブラリは -fPIC オプションなしでコンパイルされているため、動的な *.so に再リンクできません。ctypes には *.so dll が必要です。
このライブラリのパッケージ担当者に文句を言う以外に、これを *.so に入れるためにできることはありますか? 何とかラッパー関数を書いているのでしょうか?
編集: