在 cpp 文件中列出外部变量
Posted
技术标签:
【中文标题】在 cpp 文件中列出外部变量【英文标题】:Listing external variables in cpp file 【发布时间】:2012-08-14 10:44:23 【问题描述】:“nm”命令未列出外部变量,因为它们已被声明为 extern,因此在此程序中不会为它们分配内存。有没有其他方法可以列出外部变量?外部变量声明的信息存储在哪里?
操作系统 Windows 7 编译器mingw或vs2010
【问题讨论】:
出于什么目的,您希望列出外部可用的变量?我认为IDE调试器可能是要走的路。 不,外部符号 由nm
列出。毕竟,链接编辑器需要它们。但是,除非您动态链接,否则链接过程只会解析符号,生成的可执行文件将不再包含它。
【参考方案1】:
它们会在那里,标记为 U 表示未定义。
extern int foo;
int bar()
return foo++;
给予:
g++ -c 测试.cc 纳米测试.o 00000000 T _Z3barv 你富请注意,此示例需要 bar
才能运行。如果变量未使用,则不会在输出中生成引用。
【讨论】:
是的,如果变量未使用,则不会生成任何信息。但是这些信息(在这个文件中声明的外部变量)存储在哪里? @AlexHoppus 这是生成的目标代码中未定义的外部引用。其机制因输出平台而异,但基本上有一个此对象提供的符号列表以及此对象需要链接的符号。该列表(几乎)在您的编译器生成的每个目标文件中。 (在 Linux x86_64 或 ia32 上的 -fPIC 上,它将使用 GOT - 全局偏移表中的条目来查找它)。但它不存储看到的声明,它存储需要的符号,这就是为什么如果存在类型不匹配,您不太可能收到警告。以上是关于在 cpp 文件中列出外部变量的主要内容,如果未能解决你的问题,请参考以下文章