問題タブ [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.
c++ - ld がオブジェクト ファイルを認識しない
作業中のプロジェクトのコンパイルに問題があります。他のすべては問題なく動作しますが、コンパイルすると次のエラー メッセージが表示されます。
なぜこれが起こるのか分かりません。おそらくコードのエラーですが、わかりません。xmSound.o がコンパイルされたソース ファイルはここで見つけることができ、私が使用しているメイクファイル はここにあります。
linker - 共有ライブラリの作成時にリンカーに解決済みシンボルのエクスポートを強制する
c++ -shared (x86_64 で実行されている gcc) を使用して共有ライブラリを作成しています。私の問題を最小限のテストケースに落とし込むことはできませんが、私が抱えている問題は、.o ファイルの束から .so を作成していることです。これらの.oファイルの1つは、.soからエクスポートしたいシンボル(nmは「D」を示します)をエクスポートします。他の .o にはその記号が必要です (nm は 'U' を示します)。その結果、リンカーはそのシンボルを結果の .so でローカルにします (nm は 'd' を示します)。
コマンド ラインから必要な .o を削除すると、.soはシンボルをエクスポートします。したがって、リンカは、.so を構築するために使用される他の .o がシンボルを必要とするため、それらの .o によってのみ必要とされ、実際にエクスポートする必要はないと判断しているようです。
最小限のテスト ケースを作成しようとすると、このようには機能しません。シンボルは、それを必要とする .o を追加するかどうかにかかわらず、常にエクスポートされます。
私の完全なコマンドラインは次のとおりです。
c++ -fno-rtti -fno-exceptions -Wall -Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wcast-align -Wno-invalid-offsetof -Wno-variadic-macros -pedantic -Wno-long-long -gdwarf-2 -fno-strict-aliasing -pthread -pipe -DDEBUG -D_DEBUG -DDEBUG_sfink -DTRACING -gdwarf-2 -fPIC -shared -Wl,-z,defs -Wl,-h,libmozjs.so -o libmozjs.so jsapi.o jsarena.o jsarray.o jsatom.o jsbool.o jscntxt.o jsdate.o jsdbgapi.o jsdhash.o jsdtoa.o jsemit.o jsexn.o jsfun.o jsgc.o jsgcchunk.o jshash.o jsinterp.o jsinvoke.o jsiter.o jslock.o jslog2.o jsmath.o jsnativestack.o jsnum.o jsobj.o json.o jsopcode.o jsparse.o jsproxy.o jsprf.o jspropertycache.o jspropertytree.o jsregexp.o jsscan.o jsscope.o jsscript.o jsstr.o jstask.o jstypedarray.o jsutil.o jswrapper.o jsxdrapi.o jsxml.o prmjtime.o jsdtracef.o jstracer.o Assembler.o Allocator.o CodeAlloc.o Containers.o Fragmento.o LIR.o njconfig.o RegAlloc.o avmplus.o NativeX64.o jsbuiltins.o VMPI.o CTypes.o Library.o mozjs-dtrace.o -lpthread -Wl,-rpath-link,/bin -Wl,-rpath-link,/lib -Wl,--whole-archive ctypes/libffi/.libs/libffi.a -Wl,--no-whole-archive -L/home/sfink/moz-central/obj-dtrace/dist/lib -lplds4 -lplc4 -lnspr4 -lpthread -ldl -ldl -lm -lm -ldl
これが呼び出すコア コマンドでも同じ動作が得られます (また、無関係なフラグを手動で削除しました)。
/usr/bin/ld --no-add-needed --eh-frame-hdr --build-id -m elf_x86_64 --hash-style=gnu -shared -o libmozjs.so /usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.4.4/crtbeginS.o -L/usr/lib/gcc/x86_64-redhat-linux/4.4.4 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.4 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../.. jsapi.o jsarena.o jsarray.o jsatom.o jsbool.o jscntxt.o jsdate.o jsdbgapi.o jsdhash.o jsdtoa.o jsemit.o jsexn.o jsfun.o jsgc.o jsgcchunk.o jshash.o jsinterp.o jsinvoke.o jsiter.o jslock.o jslog2.o jsmath.o jsnativestack.o jsnum.o jsobj.o json.o jsopcode.o jsparse.o jsproxy.o jsprf.o jspropertycache.o jspropertytree.o jsregexp.o jsscan.o jsscope.o jsscript.o jsstr.o jstask.o jstypedarray.o jsutil.o jswrapper.o jsxdrapi.o jsxml.o prmjtime.o jsdtracef.o jstracer.o Assembler.o Allocator.o CodeAlloc.o Containers.o Fragmento.o LIR.o njconfig.o RegAlloc.o avmplus.o NativeX64.o jsbuiltins.o VMPI.o mozjs-dtrace.o -lnspr4 -lstdc++ -lm -lgcc_s -lpthread -lc -lgcc_s /usr/lib/gcc/x86_64-redhat-linux/4.4.4/crtendS.o /usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../lib64/crtn.o
更新: おそらくもっと重要なのは、これらのシンボルが別のセクションにあり、可視性が隠されていることです。objcopy を使用してそれらをグローバルにすることは役に立ちません。どのセクションを何に使用するためのルールが何なのかわかりません。
c++ - AIX 6.1 リンカー エラー
AIX でアプリケーションをコンパイルしようとしています。Linux、Solaris x86、および Windows で問題なくビルドできますが、AIX でのビルドを試みたのはこれが初めてです。すべてのライブラリを一緒にリンクするところまでたどり着きましたが、次のようなエラー メッセージが表示されました: Linking... ld: 0711-101 FATAL ERROR: Allocation of 96864 bytes failed in routine get_RLDs. 十分なメモリがありません。ulimit またはページング・スペースを確認するか、ローカルの問題報告手順を使用してください。collect2: ld が 12 の終了ステータスを返しました
ページスペースを 1GB 増やしました - 違いはありません ulimit 値を増やしました - 違いはありません maxdata フラグをリンカに渡そうとしました - 違いはありません
他に試すべきことはありますか?
問題の原因となっているライブラリを特定する方法がわかりません。私たちは、boost_date_time、xerces-c、libz、および 50 の内部ライブラリに対して静的にリンクしようとしています。動的リンクに変更できず、システムの構造をあまり変更できないため、ld を試すための構成またはパラメーターのアイデアを探しています。
c - gcc リンカ エラー: シンボルのバージョン ノードが見つかりません
共有ライブラリを構築しようとすると、次のエラーが発生します。
libavformat.so: シンボル av_dup_packet@LIBAVFORMAT_52 のバージョン ノードが見つかりません
ld: 動的セクション サイズの設定に失敗しました: 値が正しくありません
このエラーの意味を知っている人はいますか? ホストは i586-linux ターゲットは arm-linux
編集:解決済み、コメントを参照
gcc - Fedora 8/EC2: ld がライブラリを見つけられません
Fedora 8 の Amazon EC2 イメージで gcc を動作させようとしていますが、ライブラリで問題が発生しています。ld が -lz -lm -lbz2 を見つけられません。
-L /lib と -L /usr/lib を gcc の引数に追加しようとしましたが、まだ機能していません。
私は何が欠けていますか?
c - fmod() の使用中に gcc がエラーを出す
fmod のサンプル コード:
コンパイル:
私は得る
/tmp/ccztJO01.o: 関数「main」内:
main.c:(.text+0x4d): `fmod' への未定義の参照
collect2: ld が 1 つの終了ステータスを返しました
次に、Googleでこれを見つけました:
を使用する必要があるのはなぜ-lm
ですか。正確には何ですか? gcc に関する詳しい情報はどこから入手できますか?
c++ - GNU ld はそこにあるライブラリを見つけることができません
私がここでいじっているパッケージはどちらかというと不明ですが、それでも問題はかなり一般的です。基本的に、私は Python モジュール (rql と呼ばれる) を C++ 拡張でコンパイルしようとしています。拡張機能は、いくつかのライブラリを含む gecode と呼ばれる外部フレームワークを使用します。gecode をコンパイルしてローカルにインストールしました。さて、出力がそれ自体を物語るようにしましょう:
gcc - gccとのリンクで「複数の定義されたシンボル」を回避する方法
gcc 2.95.3 を搭載した古いシステムを使用しています。2 つのオブジェクトをリンクする必要があります。これらのオブジェクトは互いに何の関係もありませんが、それぞれが同様の名前のメソッドを持っています。どちらの名前も変更できませんが、リンカーが文句を言わないようにビルドする方法があることを願っています。それが不平を言っているメソッドは、それぞれオブジェクト内のクラスによって内部的に呼び出されます。私に何ができる?
unix - ld はリンクするライブラリを見つけることができません
以下は、私の問題を説明する例です。
path1 と path2 は両方とも相対パスであり、ld の pwd に従ってライブラリ A を見つけることができるのに、なぜ ld はこのエラー メッセージを出力したのでしょうか?
この問題をデバッグするための提案を誰かに教えてもらえますか?
rt というライブラリの前に「-static」があります。
あなたの提案として、私はgccにldを駆動させてリンクプロセスを実行させようとしています。gcc Ao Bo -mabi=64 -static -lrt -Xlinker -T -Xlinker ld.script -W1,-rpath,/usr/local/lib -lmemdbg -o target 動作しません。
次に、「-static」オプションを削除し、-lpthread の後に別の動的ライブラリを削除します (rt は、「-static」を削除したときに検出される pthread に依存するため)
gcc Ao Bo -mabi=64 -lrt -lpthread -Xlinker -T -Xlinker ld.script -W1,-rpath,/usr/local/lib -lmemdbg -o target を実行すると、オブジェクトは正常にリンクされます。
そして、「-v」を gcc に渡して、「-static」コマンドが機能しない理由を理解しようとします。いくつかの「-L」オプションが表示され、検索リストに librt.a という名前のライブラリが見つかりました。
私は本当に混乱しました。gcc のバージョンは 4.3 です
haskell - シンボル__module_registeredエラーの定義が重複しています
GHCiから、「シンボル__module_registeredの定義が重複しています」というエラーメッセージが表示されます。次のようになります。
これを修正する方法は?