いくつかのファイルをリンクしようとしています。これが私のコマンドです:

gcc -T linker.ld -o Stack\ Berry.bin -ffreestanding -O2 -nostlib kernel.o boot.o -fPIC -lgcc 

しかし、このエラーが発生します:

/usr/bin/ld: boot.o: relocation R_X86_64_32 against `.multiboot" can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: final link failed: Nonrepresentable section on output 

-fPIC引数を含めましたが、間違った場所に配置しただけですか?このフラグの構文については何も見つかりませんでした。ありがとうございます。

コメント

  • -fPICオプションはコンパイルフェーズ(オブジェクトファイルを生成するコマンド)の間に適用する必要があります-あなたが示しているように、リンクフェーズではなく
  • そうではありません'動作しないようです。GASコード(引数ではない)とオブジェクトファイルを生成するコマンドをコンパイルしてみました。動作しないようです。gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1)私の最初の推測(そしてそれは唯一の推測です)は、それがコマンドラインの順序の問題であるということでした。コマンドの順序を変更してみましたか?行?(2)実際に「-fPICで再コンパイル」エラーを読むと、最初の推測に疑問を抱き、@ steeldriverが正しい考えを持っていると信じます。…(続き)
  • (続き)… (3)この質問はここではトピックから外れており、スタックオーバーフローに属していると言われます。ここではトピックになっていると思いますが、 スタックオーバーフローでより迅速かつ正確に回答される可能性が高いことに同意します。ここで回答が得られず、質問が移行されない場合は、フラグを付けて移動するように依頼することをお勧めします。質問を再投稿しないでください。
  • はい、順序を変更してみました。

回答

boot.oには.multiboot elfセクションがあります。これは-fPICboot.o-fPICでコンパイルしようとすると、失敗するはずです。

https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format ヘッダー用。

一方、

。「動的ローダー」があったとしても、起動プロセス中に動的にリンクするものはありません。

コメント

  • ヘッダーとフラグ値の情報しか見つかりませんでしたが、boot.sと一致していました。ところで、boot.oはオブジェクトファイルであり、boot.sである必要があるため、コンパイルできません。
  • .binを-fPICでコンパイル/リンクすることで何を達成しようとしていますか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です