問題タブ [ld]
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.
macos - Mac OS X 10.6 に gnu ld をインストールするには?
macbook pro (mac os x 10.6)で優れたContiki OSをコンパイルするのに苦労しています。Contiki は実際には、GCC、AR、LD などの GNU 固有の機能とオプションを多数使用しています。それで、macports 経由でこれらのユーティリティをインストールしましたが、"port install binutils" では GNU ld がインストールされないようですね。
問題は、Mac で GNU ld を取得するにはどうすればよいかということです。ハードウェイ(つまりザ・wget, configure, make, make install
ウェイ)に代わる簡単な方法はありますか?
c - ld: リンカ エラー
ld: foo.o: 再配置 R_X86_64_PC32 に対する未定義のシンボル `bar' は、共有オブジェクトを作成するときに使用できません。-fPIC で再コンパイル
-fPIC で再コンパイルしましたが、それでもこのエラーが発生します。
shared - 共有ライブラリ内の関数が未実装の関数をリンクする方法は?
実装されていない関数が存在する共有ライブラリを作成することは可能ですか?
私は共有ライブラリ testDele.so を作成し、testDele.so 内のいくつかの関数を残して、他の人が実装できるようにしたいと考えています。たとえば、次のようになります。
- ライブラリ プロバイダーはファイルを作成します。
====== testDele.c ==============
========== testDele.h ==============
- USER-B がファイルを実装する
====== testDeleImp.c ===============
====== testDeleMain.c =============
次に、私(共有ライブラリプロバイダー)が共有ライブラリをコンパイルするとき
以下のエラーが発生しました
================================================
このエラーは、実装されていない関数 priFunc が原因であることがわかっています。しかし、未定義のシンボルのリンクを防ぐ gcc のパラメーターはありますか?
c - エラーの理由と解決策-"/usr/ bin / ld:-leventが見つかりません"?
libeventライブラリを使用しているプログラムをコンパイルしている間、gccオプション-leventを使用しています。しかし、私はこのエラーが発生しています-
/ usr / bin / ld:-leventが見つかりません
システムにlibeventがないので、コンパイル中に静的にリンクしています。
どうすればこれを解決できますか?
前もって感謝します!
c - シンボル etext、edata、および end はどこで定義されていますか?
これは、Linux の man ページからのコードです。
以下のプログラムを実行すると、次のような出力が生成されます。
はどこetext
にedata
end
定義されていますか? これらの記号にどのように値が割り当てられますか? それはリンカーか何かによるものですか?
linux - '-rpath-link'オプションを尊重しないのはなぜですか?
私はstraceを使用してこれを検出します:
よくわかりません; -rpath-link
マニュアルによると、最初はパスで見つけようとする必要があります。
linux - 共有ライブラリ内のライブラリ関数の選択的静的リンク
サードパーティの静的ライブラリの関数を使用する共有ライブラリを作成したいと考えています。たとえばfoo
、bar
からlibfoobar.a
. 私のメインアプリケーションもfoo
そのシンボルを使用しており、エクスポートすることを知っています。bar
したがって、リンクしてコードサイズを節約し、「foo」を未解決のままにしたいだけです(メインアプリケーションによって提供されるため)。を含めるlibfoobar.a
と、リンカーldは共有ライブラリに両方の関数を含めます。を含めないと、アプリケーション自体が にリンクしていないためlibfoobar.a
、ライブラリは関数にアクセスできません。質問:bar
bar
- 共有ライブラリを構築するときに特定のシンボルのみを解決するようにldに指示する方法はありますか?
- 共有
libfoobar.a
ライブラリに変わりますか? bar
から関数を含むファイルを抽出libfoobar.a
し、リンカー行でそれを指定しますか?- 心配する必要はありません。ランタイム ローダーは
bar
アプリケーションから使用するため、共有ライブラリ内の のコピーはbar
読み込まれませんか?
xcode - Xcode でのリンク
Xcode リンク オブジェクト ファイルを正しく作成するにはどうすればよいですか?
「メイン」とすべての依存関係を含むファイルが適切にコンパイルされます (コマンドラインでそれらを簡単にリンクして、実行可能ファイルを生成できます)。しかし、Xcode はそれを拒否しているようで、「シンボルが見つかりません」という ld エラーが発生します。
これが私の現在のセットアップの様子です。すべての依存関係 (電卓、入力など) が検出され、適切にコンパイルされます。cpp ファイルには main が含まれていますが、(依存関係によって生成された) .o ファイルへのリンクに失敗し、複数の ld "symbol not found" エラーが発生します。
何か案は?
python - Mac での python-config ldflags
python-config --ldflags
OS X 10.6.2 で問題が発生しました。
システム以外の python.org python インストールを使用する:
しかし、上記の LDFLAGS を使用して Python を組み込んだ ac プログラムをビルドすると、システムの python が組み込まれます。-lpython2.5 は、-L パス内のシステムの前に、最初にシステム python を取得しているようです。
これまでのところ、私がそれを機能させる唯一の方法は
しかし、配布に関しては、python-config を使用できるようにしたいと思っています。
ライブラリ検索パスが期待どおりに機能しなくなった原因は何ですか? man ページによると、-L パスはデフォルト パスの前に検索する必要があります。
「デフォルトの検索パスを忘れて、-Lで指定されたパスのみを検索する」という行に沿って、python-config出力に追加して機能させるオプションはありますか?
または、パス上にある Python から動作中の -framework フラグを抽出する方法はありますか?
gcc - GCC リンカーに関する質問
今のところ、次の質問を自分で実験して整理する環境がないため、申し訳ありません。
1) 4 つのライブラリ ファイルがあるlibmylib_super.a
とします。リンクするライブラリを指定する際、次のアプローチの違いは何ですか:libmylib_super.so
mylib_dumb.a
mylib_dumb.so
A) -l:libmylib_super.a
B) -llibmylib_super
C) -lmylib_super
D)-lmylib_dumb
-static
2)マニュアルページからの定義:
動的リンクをサポートするシステムでは、これにより共有ライブラリとのリンクが妨げられます。他のシステムでは、このオプションは効果がありません。
このリンカ オプションは質問 1 と関係がありますか? それとも……ひょっとして、お互いに干渉しあう?
ありがとう。
--- 2009-12-28 編集 ---
Boost date_time ライブラリにリンクすることで、環境を整えて少し実験しました。libboost_date_time-mt-d.a
、、(シンボリック リンク)の3 つのライブラリ ファイルがあるとしますlibboost_date_time-mt-d.so.1.41.0
。libboost_date_time-mt-d.so -> libboost_date_time-mt-d.so.1.41.0
A.1) -l:libboost_date_time-mt-d.a
==> リンク OK、ライブラリ ファイルがなくてもバイナリは動作します。
A.2) ==>リンク エラー-l:libboost_date_time-mt-d.a
あり-static
/usr/bin/ld: cannot find -lm
C.1) -lboost_date_time-mt-d
==> リンク OK、バイナリは動作しますが、共有ライブラリ ファイルが必要です。
C.2) ==>リンク エラー-lboost_date_time-mt-d
あり-static
/usr/bin/ld: cannot find -lm
A.2 と C.2 のエラーについて何か考えはありますか?
さらに、C.1でプログラムを実行している間、共有ライブラリファイルを名前で検索しているように見えますlibboost_date_time-mt-d.so.1.41.0
が、libboost_date_time-mt-d.so
. プログラムがライブラリの正確なバージョンのないシステムで実行されている場合、それは不便ではないでしょうか? 共有ライブラリを使用しているときにバージョンを処理する実用的な方法は何ですか?