問題タブ [relocation]
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.
linker - リンクされたプログラムを再配置する
すでにリンクされている elf ファイルを別のアドレスに再配置し、内部参照も更新することはできますか?
たとえば、静的にリンクされた elf ファイルが 0x50000 にリンクされている場合、それを 0x1000000 に移動してポインターとアドレスを更新するにはどうすればよいですか?
java - 子プロジェクトで再配置された依存関係を使用する
ヘイホー、
現在、bukkit プラグインを開発しており、グアバを使用したいと考えています。Bukkit はまだ Guava 11.0 を使用していますが、14.0 を使用したいと考えています。そこで、メインモジュールでグアバを再配置しようとしました。これは完璧に機能しました。同じレベルの他のモジュールもグアバを使用しており、「同じ」グアバが必要です。メインプロジェクトでも使用されているグアバです。もちろん、インポートは変更され、メイン プロジェクトと他のモジュールは互換性がありません。
プロジェクトの構造:
親:
- メイン モジュール: guava(14.0) の再配置されたバージョンを使用します#
- 別のモジュール: guava 14.0 を使用していますが、再配置されていません -> メイン モジュールと互換性がありません
グアバを他のモジュールの同じパスに再配置しようとしましたが、何も起こりません。
多分誰もがこれを修正する方法を知っています。他のモジュールで再配置されたグアバを使用する方法が必要です:/
linker - GNU リンカ (ld) が共有ライブラリに静的再配置を生成する
一番下のサンプルコードをコンパイルすると
いくつかの再配置を含む共有ライブラリを取得します (readelf lib.so -r):
今まで私は、リンカーがすべての静的再配置を解決し、必要に応じて動的再配置 (ローダーによって処理される) を生成すると信じていました。リンカー出力に静的再配置が残っているのはなぜですか? このドキュメントでは、R_ARM_ABS32 は静的再配置であり、次のようにも述べています。
静的再配置は静的リンカによって処理されます。それらは通常、完全に解決されるか、リンク後のステップまたは動的ローダーによって処理される動的再配置を生成するために使用されます。適切に形成されたイメージには、静的リンクが完了した後の静的再配置がないため、通常、ポストリンカまたは動的ローダーは動的再配置のみを処理する必要があります。
ところで、これは i386-elf-gcc を使用して再現することもできます。そこで使用される静的再配置は R_386_32 です。
ローダーで実際に処理する必要がある再配置を教えてください。前もって感謝します!
コード例:
makefile - -fPIC を指定して再コンパイルする
私のマシンにはMPICH 3.0.4がインストールされています (Ubuntu 12.04)。Qthreadsと呼ばれるライブラリをインストールしようとしていますが、これは以前に使用して正常にインストールしたものです (MPICH2 パッケージがインストールされている場合を除く)。構成は正常に機能します。
./configure --prefix=/usr/local/qthreads --enable-multinode --with-multinode-runtime=mpi --with-portals4=/usr/local/portals4 --with-hwloc=/usr/local/hwloc
:
を実行しようとするとmake
、次のエラーが表示されます。
私は周りを見回しましたが、明らかな(そして可能な唯一の)解決策は、コンパイラーが言うことを行うことです:recompile with -fPIC
. ただし、Qthreads の Makefile は長くて複雑なので、調べて編集するのをためらっています。で再コンパイルする簡単な方法はあり-fPIC
ますか?
お知らせ下さい。ご意見をお待ちしております。
c++ - 移転の起点を見つける
Ulrich Drepper のスクリプトを使用すると、DSO の再配置の数を簡単に数えることができますが、ファイルrelinfo.pl
では機能しません。.o
大規模な共有ライブラリがあり、その再配置の数に満足していないとします。それらがどこから来たのか (シンボル、または少なくとも ) を見つけて、簡単に修正できるタイプ (例: -> ).o
であるかどうかを確認する方法はありますか?const char * str = "Hello World";'
const char str[] = "Hello World";
c - AVR: 収まるように切り捨てられた再配置
私はこのコミュニティに参加したばかりで、アカウントを作成して質問したことはありませんが、プログラミングの問題を解決するために常にこのサイトを使用しています。ありがとうございます!しかし今回は、私の正確なニーズに一致する別の質問を見つけることができませんでした. これが重複する場合は、お詫び申し上げます。
私は、Ubuntu 12.04 の派生物である基本 OS 0.2 (Luna) を使用しています。ATmega32u4 マイクロプロセッサ用のプログラムをコンパイルするために avr-gcc ライブラリを使用しています。このプログラムを開発しながら何度かコンパイルしましたが、今までこのエラーは発生していませんでした。以下に貼っておきます。
要するに、これが何を指しているのかわかりません。私のプログラムには多数のファイルが含まれているため、ここにすべてを正確に投稿することはできません。代わりに、次の質問に対する一般的な回答に興味があります。
- 「収まるように切り捨てられた再配置」エラーとは何ですか? 遠すぎるメモリへのアクセスに関係していると読んだことがありますが、実際に C プログラム内でどのように発生するのでしょうか?
- R_AVR_13_PCREL とは? avr-gcc ライブラリに固有のようです。私のプログラムのどの側面がそのような変数を参照する可能性がありますか?
- 私が含めている唯一の一般的な C ヘッダーは math.h です。他のファイルは私自身のものです。Makefile に配置する必要がある math.h のファンキーなフラグがあることは知っています。-lmだと思います。しかし、私はこれを無駄にしようとしました。
皆様、どうもありがとうございました。このコミュニティの助けに感謝します。