問題タブ [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.

0 投票する
2 に答える
1873 参照

gcc - ARM STR7xx のローダー スクリプト

Eclipse + CDT + yagarto (gnu ツールチェーン) + OpenOCD を使用して ARM をプログラムしようとしています。いくつかのサンプル プロジェクト (yagarto サイトなど) で、多くのリンク情報が (セクション定義と共に) 指定されているリンカー スクリプト (*.ld) を見つけました。実際、私は以前にこのファイルに直面したことがなく (IAR はそれらを必要としません)、一見しただけでは理解しにくいと思います。私の質問は、すべてのプロジェクトでターゲット プロセッサ (STR710FZ2T6) 用のスクリプト ファイルを 1 つ使用できるか、またはこのスクリプトの作成に慣れてプロジェクトごとに作成する必要があるかということです。特定のターゲット プロセッサのすべてのプロジェクトで 1 つのファイルを使用できる場合は、そのようなユニバーサル ファイルをどこで見つけることができるかアドバイスをください。

0 投票する
2 に答える
865 参照

c - 重複シンボルに関する奇妙な ld エラー

main.c と logoff.c の 2 つのファイルで構成されるプロジェクトがあります。それらをコンパイルしようとすると、次のエラーが発生します。

logoff.c に logoff という名前の関数がありますが、main.c で「logoff」というテキストを検索しましたが、何も見つかりませんでした (関数はまだ呼び出されていません!)。

関数の名前を log_off に変更すると機能します。ファイルには 2 番目の関数があり、その名前も変更しない限り、同じエラーが発生します。

これが発生する理由はありますか?2 つの異なるシステムでこの問題が発生しています。関連する可能性のあることの 1 つは、別のプロジェクトで同じ logoff.c ファイルを使用したが、このファイルに接続されていないことです。

0 投票する
4 に答える
26420 参照

binary - GNUldリンカースクリプトを含むバイナリファイルを含める

リンカースクリプトが機能しています。内容がファイルから直接プルされる別のデータセクションを追加したい(ldはそれを解析してセクションを抽出するべきではないなど)。どうやってやるの?

0 投票する
4 に答える
1405 参照

linux - GCC / ELF-私のシンボルはどこから来るのですか?

多数の共有オブジェクトに動的にリンクされている実行可能ファイルがあります。(実行可能ファイルにインポートされた)シンボルがどれに属しているかをどのように判断できますか?

複数の可能性がある場合、ldをシミュレーションして、どこから取得されているかを確認できますか?

0 投票する
2 に答える
8375 参照

gcc - 共有オブジェクトのシンボルを LD から非表示にします

同じシンボル名がエクスポートされることがある 2 つのサードパーティ ライブラリがあります。実行可能ファイルがロードされると、通常、ldは間違ったものを選択し、結果としてクラッシュします。私はこれらのライブラリの内容についてあまり多くを行うことができないので、ldに適切な実装を見つける方法を指示する方法があるかもしれません。

OS - Solaris 10、私のプログラムは autoconf/autotools/gcc でビルドされています。競合するライブラリはlibclntsh (Oracle ドライバーの一部) と OpenLDAP です。残念ながら、Oracle の LDAP クライアントの実装は使用できません。OpenLDAP が持つ多くの機能が欠けています。

編集: リンクは次のとおりです: libclntsh.so->A.so->MAIN<-B.so<-libldap_r.so

0 投票する
5 に答える
20143 参照

c++ - コンパイルされたライブラリに含まれている使用可能な関数などをどのようにリストしますか?

関数がライブラリ内に存在するかどうかを判断したり、コンパイルされたライブラリ内の関数を一覧表示したりするにはどうすればよいですか?

0 投票する
3 に答える
3650 参照

gcc - gcc /g++およびldとのプロファイルリンク時間

私はg++を使用して、約15個のc++ソースファイルと4個の共有オブジェクトファイルで構成されるプロジェクトをコンパイルおよびリンクしています。最近、リンク時間が2倍以上になりましたが、makefileの履歴を利用できません。リンクのどの部分に時間がかかっているかを確認するためにg++のプロファイルを作成する方法はありますか?

編集: makefileが常に-O3最適化を使用していることに気付いた後、そのスイッチを削除するだけでリンク時間を半分にすることができました。試行錯誤せずにこれを見つけることができた良い方法はありますか?

編集:私は実際にldがどのように機能するかをプロファイリングすることに興味がありません。特定のコマンドラインスイッチまたはオブジェクトファイルへのリンク時間の増加をどのように一致させることができるかを知りたいです。

0 投票する
3 に答える
8882 参照

linux - Linux でシンボルを固定アドレスにリンクする

Linux(x86)でバイナリを通常どおり実行できるように、GNU ldを使用して(一部の)シンボルを特定の固定アドレスにリンクするにはどうすればよいですか?これらのシンボルへのアクセスはありませんが、アドレスは重要です。

たとえば、次の構造があります。

foobarアドレス 0x76543210にリンクしたいのですが、標準ライブラリと残りのアプリケーションは通常どおりリンクします。アプリケーションは foobar のアドレスを使用しますが、その背後にある (存在しない可能性がある) メモリを参照しません。

この要求の論理的根拠は、この同じソースを 2 つのプラットフォームで使用できるということです。ネイティブ プラットフォームでRegister32は、単に avolatile uint32_tにすることができますが、Linux では、 eg を定義Register32する a と同じサイズの C++ オブジェクトであり、アドレスを使用します。オブジェクトのアドレス (およびデータ) を使用して通信フレームワークに要求を送信し、リモート ハードウェアで実際のアクセスを実行します。したがって、リンカーは、構造体のフィールドが正しい「アドレス」を参照するようにします。uint32_toperator=Register32

0 投票する
3 に答える
61364 参照

linux - makefileの-Iと-Lの違いは何ですか?

makefileでの-Iフラグと-Lフラグの使用法は何ですか?

0 投票する
7 に答える
114733 参照

c - アプリケーションを実行するたびにエクスポートで LD_LIBRARY_PATH を定義する必要があるのはなぜですか?

いくつかの共有ライブラリ (gcc の c コード) を使用するコードがあります。コンパイル時には、-I と -L を使用してインクルード ディレクトリとライブラリ ディレクトリを明示的に定義する必要があります。これらは標準の場所にないためです。コードを実行しようとすると、次のエラーが発生します。

ただし、次の手順を実行すると、すべてが正常に機能します。

さて、奇妙な部分は、これが一度しか機能しないことです。sync_test を再度実行しようとすると、export コマンドを最初に実行しない限り、同じエラーが発生します。以下を .bashrc に追加しようとしましたが、違いはありませんでした。