問題タブ [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.
gcc - ARM STR7xx のローダー スクリプト
Eclipse + CDT + yagarto (gnu ツールチェーン) + OpenOCD を使用して ARM をプログラムしようとしています。いくつかのサンプル プロジェクト (yagarto サイトなど) で、多くのリンク情報が (セクション定義と共に) 指定されているリンカー スクリプト (*.ld) を見つけました。実際、私は以前にこのファイルに直面したことがなく (IAR はそれらを必要としません)、一見しただけでは理解しにくいと思います。私の質問は、すべてのプロジェクトでターゲット プロセッサ (STR710FZ2T6) 用のスクリプト ファイルを 1 つ使用できるか、またはこのスクリプトの作成に慣れてプロジェクトごとに作成する必要があるかということです。特定のターゲット プロセッサのすべてのプロジェクトで 1 つのファイルを使用できる場合は、そのようなユニバーサル ファイルをどこで見つけることができるかアドバイスをください。
c - 重複シンボルに関する奇妙な ld エラー
main.c と logoff.c の 2 つのファイルで構成されるプロジェクトがあります。それらをコンパイルしようとすると、次のエラーが発生します。
logoff.c に logoff という名前の関数がありますが、main.c で「logoff」というテキストを検索しましたが、何も見つかりませんでした (関数はまだ呼び出されていません!)。
関数の名前を log_off に変更すると機能します。ファイルには 2 番目の関数があり、その名前も変更しない限り、同じエラーが発生します。
これが発生する理由はありますか?2 つの異なるシステムでこの問題が発生しています。関連する可能性のあることの 1 つは、別のプロジェクトで同じ logoff.c ファイルを使用したが、このファイルに接続されていないことです。
binary - GNUldリンカースクリプトを含むバイナリファイルを含める
リンカースクリプトが機能しています。内容がファイルから直接プルされる別のデータセクションを追加したい(ldはそれを解析してセクションを抽出するべきではないなど)。どうやってやるの?
linux - GCC / ELF-私のシンボルはどこから来るのですか?
多数の共有オブジェクトに動的にリンクされている実行可能ファイルがあります。(実行可能ファイルにインポートされた)シンボルがどれに属しているかをどのように判断できますか?
複数の可能性がある場合、ldをシミュレーションして、どこから取得されているかを確認できますか?
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
c++ - コンパイルされたライブラリに含まれている使用可能な関数などをどのようにリストしますか?
関数がライブラリ内に存在するかどうかを判断したり、コンパイルされたライブラリ内の関数を一覧表示したりするにはどうすればよいですか?
gcc - gcc /g++およびldとのプロファイルリンク時間
私はg++を使用して、約15個のc++ソースファイルと4個の共有オブジェクトファイルで構成されるプロジェクトをコンパイルおよびリンクしています。最近、リンク時間が2倍以上になりましたが、makefileの履歴を利用できません。リンクのどの部分に時間がかかっているかを確認するためにg++のプロファイルを作成する方法はありますか?
編集: makefileが常に-O3最適化を使用していることに気付いた後、そのスイッチを削除するだけでリンク時間を半分にすることができました。試行錯誤せずにこれを見つけることができた良い方法はありますか?
編集:私は実際にldがどのように機能するかをプロファイリングすることに興味がありません。特定のコマンドラインスイッチまたはオブジェクトファイルへのリンク時間の増加をどのように一致させることができるかを知りたいです。
linux - Linux でシンボルを固定アドレスにリンクする
Linux(x86)でバイナリを通常どおり実行できるように、GNU ldを使用して(一部の)シンボルを特定の固定アドレスにリンクするにはどうすればよいですか?これらのシンボルへのアクセスはありませんが、アドレスは重要です。
たとえば、次の構造があります。
foobar
アドレス 0x76543210にリンクしたいのですが、標準ライブラリと残りのアプリケーションは通常どおりリンクします。アプリケーションは foobar のアドレスを使用しますが、その背後にある (存在しない可能性がある) メモリを参照しません。
この要求の論理的根拠は、この同じソースを 2 つのプラットフォームで使用できるということです。ネイティブ プラットフォームでRegister32
は、単に avolatile uint32_t
にすることができますが、Linux では、 eg を定義Register32
する a と同じサイズの C++ オブジェクトであり、アドレスを使用します。オブジェクトのアドレス (およびデータ) を使用して通信フレームワークに要求を送信し、リモート ハードウェアで実際のアクセスを実行します。したがって、リンカーは、構造体のフィールドが正しい「アドレス」を参照するようにします。uint32_t
operator=
Register32
linux - makefileの-Iと-Lの違いは何ですか?
makefileでの-Iフラグと-Lフラグの使用法は何ですか?