0

CentOS 5.1 g++ 4.1.2 および 4.6.3 および 4.7.0 でテストしたところ、すべて同じ結果が得られました。これを解決するにはどうすればよいですか?基本的に、デバッグビルドでllvmをビルドすることはできません。

[hidden]$ cat x.cpp 
#include <iostream>

int main() {
}
[hidden]$ g++ -c -fPIC -g x.cpp 
[hidden]$ objdump -r x.o | grep R_X86_64_32 | head -10
000000000000001c R_X86_64_32       .debug_frame
0000000000000044 R_X86_64_32       .debug_frame
000000000000006c R_X86_64_32       .debug_frame
0000000000000006 R_X86_64_32       .debug_abbrev
000000000000000c R_X86_64_32       .debug_str+0x0000000000000414
0000000000000011 R_X86_64_32       .debug_str+0x00000000000007f2
0000000000000015 R_X86_64_32       .debug_str+0x000000000000017b
0000000000000029 R_X86_64_32       .debug_line
000000000000002e R_X86_64_32       .debug_str+0x0000000000000422
0000000000000034 R_X86_64_32       .debug_str+0x0000000000000607
4

2 に答える 2

1

これを解決するにはどうすればよいですか?

解決すべき問題はありません (問題が存在する兆候を示していません)。

いいえ、-g完全互換性-fPICがあり、互いに競合しません。

于 2012-04-21T15:04:12.250 に答える
0

これらは動的再配置ではありません。それらはリンク時に解決されます。これは -fPIC を壊しません。

静的リンクと動的リンクの 2 種類があることに注意してください。静的リンクは、オブジェクト ファイルから最終的なプログラム バイナリをコンパイルするときにコンパイラ/リンカーによって行われ、動的リンクは OS ( ld-linux.soLinux の場合) によって行われます。

動的再配置のリストを取得するには、 を使用しますobjdump -R。ただし、動的にリンクされたバイナリでのみ機能します (つまり、.o ファイルでは機能しません)。

于 2012-04-21T00:32:04.437 に答える