問題タブ [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.
linux - Linux上の実行可能ファイルからのシンボルのエクスポートの回避
実行可能ファイルを静的ライブラリ(.a)にリンクすると、静的ライブラリのシンボルが実行可能ファイルによってエクスポートされることになります。これを避けて何もエクスポートしたくない。
バージョンスクリプトを提供してみましたが、違いはないようです。私のバージョンスクリプトの内容は次のとおりです。
静的ライブラリにリンクするときに実行可能ファイルからシンボルをエクスポートしない方法はありますか?静的ライブラリ自体を再コンパイルできません。
linker - 不明なリンクエラー
私は自分のOSを開発していますが、このためにリンクに触れる必要があります。次に、このリンクスクリプトを実行してビルドしました。
しかし、物事をリンクしようとすると、いくつかのエラーが発生しました
$ ld -Tlinker.ld -o kernel.bin loader.o kernel.o
ld:linker.ld:5:構文エラー
$
私に何ができる?
linker - GNUldはセクションを削除します
ARM-CortexM3ベースのデバイスのブートスクリプトを作成しています。アセンブラブートスクリプトとCアプリケーションコードをコンパイルしてから、オブジェクトファイルを結合してデバイスに転送すると、すべてが機能します。
ただし、ar
アーカイブ(libboot.a)を作成し、そのアーカイブをCアプリケーションと組み合わせる場合、問題が発生します。
ブートコードをセクションに配置しました:
ld
これを最終的なバイナリから削除することがわかりました(「ブート」セクションは使用できません)。これは、認識している依存関係がないため非常に自然ですがld
、デバイスが正しく起動しない原因になります。
だから私の質問は:このコードを強制的に含めるための最良の方法は何ですか?
c - 別の libc ファイルにリンクするには?
バージョンの違いにより、ターゲット システムのライブラリを使用するのではなく、自分のプログラムと共に共有ライブラリを提供したいと考えています。
ldd
私のプログラムはこれらの共有ライブラリを使用していると言います:
次のようにコンパイルして、ld-xxx.so を正常にリンクしました。
しかし、うまくリンクできていませんlibc-xxx.so
。どうやってやるの ?
linux - glui /usr/bin/ld: -lXmu が見つかりません
最新の GLUIソース コードをダウンロードし、コンパイルしようとしています。そうすると、次のエラーが表示されます。
を実行するとlocate libXmu
、次の出力が得られます。
/usr/lib/libXmu.so がないためにエラーが発生するのですか? この場合、どうすれば作成できますか?(私はリンクの経験がまったくありません)。
ありがとう!
c++ - collect2.exe は何をしますか?
gcc -v -o proggy.exe proggy.o によって生成されたコードを調べると、コマンド ラインが多数のライブラリ オプションとライブラリに展開され、そのすべてが collect2.exe を使用してリンクされていることがわかります。ld.exe はどうなりましたか? なぜ私はそれを見ないのですか?collect2.exe が何をするのか説明してもらえますか?
python - アセンブラに関するドキュメントはどこにありますか?
Python を使用して「プログラム」を解析し、それをアセンブラーに変換する非常に短いプログラムを作成して、小さなプログラミング言語を実行可能ファイルにコンパイルできるようにしました。
詳細については、こちらのブログをご覧 ください http://spiceycurry.blogspot.com/2010/05/simple-compilable-programming-language.html
私の質問は...上記のブログでスクリプトをさらに拡張できるように、他のカーネルコマンドをどこで見つけることができますか?
gcc - Gccおよびld引数
--enable-auto-import
gccからldにオプションを渡すにはどうすればよいですか?
gcc - 2 つの GCC コンパイル済み .o オブジェクト ファイルを 3 つ目の .o ファイルに結合
2 つの GCC コンパイル済み .o オブジェクト ファイルを 3 つ目の .o ファイルに結合するにはどうすればよいですか?
ソース ファイルにアクセスできる場合、-combine
GCC フラグはコンパイル前にソース ファイルをマージします。
.o
ただし、これはソース ファイルに対してのみ機能し、GCC はこのコマンドの入力としてファイルを受け入れません。
通常、.o
リンカーの出力を入力として使用できないため、ファイルのリンクは正しく機能しません。結果は共有ライブラリであり、結果の実行可能ファイルに静的にリンクされません。
c++ - _dl_runtime_resolve-共有オブジェクトはいつメモリにロードされますか?
高いパフォーマンスが要求されるメッセージ処理システムがあります。最近、最初のメッセージが後続のメッセージよりも何倍も長くかかることに気づきました。これがシステムを通過するときに、一連の変換とメッセージの拡張が発生します。その多くは、外部ライブラリを介して行われます。
この問題のプロファイルを作成し(callgrindを使用)、1つのメッセージの「実行」と多くのメッセージの「実行」を比較しました(比較のベースラインを提供します)。
私が見る主な違いは、関数「do_lookup_x」が膨大な時間を費やしていることです。この関数のさまざまな呼び出しを見ると、それらはすべて共通の関数_dl_runtime_resolveによって呼び出されているようです。この関数が何をするのかはわかりませんが、私には、これは、さまざまな共有ライブラリが初めて使用され、次にldによってメモリにロードされているように見えます。
これは正しい仮定ですか?バイナリは、使用の準備が整うまで共有ライブラリをメモリにロードしないため、最初のメッセージで大幅な速度低下が見られますが、後続のメッセージでは見られません。
これを回避するにはどうすればよいですか?
注:マイクロ秒スケールで動作します。