铿锵++;3.5.0-rdynamic 我编译C++代码,我尝试添加-rDrand选项,这样我就可以打印出一个有意义的堆栈跟踪来调试我的C++程序,但是CLAN抛出一个警告,说“编译过程中没有使用参数:”-ReDebug“”。p> 作为一个测试,在我的系统中,我尝试编写一个简单的C++程序并用-rDrand编译它,它没有问题,但是这个项目似乎没有进行。p>
任何建议都非常有用当您只是编译源代码而不是链接源代码时,您可能会使用铿锵++;3.5.0-rdynamic 我编译C++代码,我尝试添加-rDrand选项,这样我就可以打印出一个有意义的堆栈跟踪来调试我的C++程序,但是CLAN抛出一个警告,说“编译过程中没有使用参数:”-ReDebug“”。p> 作为一个测试,在我的系统中,我尝试编写一个简单的C++程序并用-rDrand编译它,它没有问题,但是这个项目似乎没有进行。p>,c++,ubuntu,clang,clang++,ubuntu-14.10,C++,Ubuntu,Clang,Clang++,Ubuntu 14.10,任何建议都非常有用当您只是编译源代码而不是链接源代码时,您可能会使用-rdynamic标志。 它是链接器的标志,因此只有在链接时才需要它。 某些版本的clang可能无法识别它,在这种情况下,您可以指示clang将正确的选项传递给链接器,通常是: -Wl,--export-dynamic 所以,例如 clang++ -rdynamic test.cpp 或 但是,如果单独编译和链接,请仅在链接阶段使用: clang++ -c test.cpp clang++ --Wl,--export-dy
-rdynamic
标志。
它是链接器的标志,因此只有在链接时才需要它。
某些版本的clang可能无法识别它,在这种情况下,您可以指示clang将正确的选项传递给链接器,通常是:
-Wl,--export-dynamic
所以,例如
clang++ -rdynamic test.cpp
或
但是,如果单独编译和链接,请仅在链接阶段使用:
clang++ -c test.cpp
clang++ --Wl,--export-dynamic test.o
(或者作为最后一步:
clang++-rdynamic test.o
)nos的答案是正确的,对我帮助很大。一个小提示,
-Wl,--export-dynamic
应该是-Wl,--export-dynamic
还有一些方法可以确保-rdynamic
工作正常。使用
readelf-s
查看ELF符号:e、 g 您将在
.dynsym
中看到所有符号,而不仅仅是使用过的符号。还有一些关于
-rdynamic
中条带的影响的有趣测试:
另请参见--export dynamic是一个不受支持的选项,我在那篇文章的-Wl,--export dynamic
,clang++应该将其传递给链接器,如果您得到一个错误,它应该来自链接器,而不是来自clang++,逗号将我抛出,我这次正确地尝试了该命令,警告现在已发出“叮当声:警告:-Wl,--导出动态:“链接器”输入未使用”。这是一个我从未见过的警告,因此我尚未对其进行研究,这就是我现在要做的。如果我遇到更多问题,我很可能会删除此问题并创建一个新问题。感谢您让我更进一步。
clang++ -c test.cpp
clang++ --Wl,--export-dynamic test.o
$ cat t.c
#include <stdio.h>
void bar() {}
void baz() {}
void foo() {}
int main() { foo(); printf("test"); return 0; }
$ clang -O0 -o test t.c
$ readelf -s test >test.elf
Symbol table '.dynsym' contains 7 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab
2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.17 (2)
3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (2)
5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable
6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND printf@GLIBC_2.17 (2)
$ clang -rdynamic -O0 -o test1 t.c
$ readelf -s test1 >test1.elf
Symbol table '.dynsym' contains 24 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab
2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.17 (2)
3: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (2)
5: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable
6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND printf@GLIBC_2.17 (2)
7: 0000000000420038 0 NOTYPE GLOBAL DEFAULT 25 _bss_end__
8: 00000000004009a0 68 FUNC GLOBAL DEFAULT 14 main
9: 0000000000420030 0 NOTYPE GLOBAL DEFAULT 25 __bss_start__
10: 0000000000420030 0 NOTYPE GLOBAL DEFAULT 25 __bss_start
11: 0000000000400994 4 FUNC GLOBAL DEFAULT 14 bar
12: 0000000000400a7c 4 OBJECT GLOBAL DEFAULT 16 _IO_stdin_used
13: 0000000000420038 0 NOTYPE GLOBAL DEFAULT 25 _end
14: 0000000000420038 0 NOTYPE GLOBAL DEFAULT 25 __end__
15: 0000000000420020 0 NOTYPE GLOBAL DEFAULT 24 __data_start
16: 0000000000420030 0 NOTYPE GLOBAL DEFAULT 24 _edata
17: 0000000000400a68 4 FUNC GLOBAL DEFAULT 14 __libc_csu_fini
18: 000000000040099c 4 FUNC GLOBAL DEFAULT 14 foo
19: 00000000004009e8 128 FUNC GLOBAL DEFAULT 14 __libc_csu_init
20: 00000000004008a0 0 FUNC GLOBAL DEFAULT 14 _start
21: 0000000000420020 0 NOTYPE WEAK DEFAULT 24 data_start
22: 0000000000400998 4 FUNC GLOBAL DEFAULT 14 baz
23: 0000000000420038 0 NOTYPE GLOBAL DEFAULT 25 __bss_end__