|
|
1
3
你的链接器可能正在悄悄地解决背后的重复符号。您可能会从供应商那里获得静态库,并且必须将它们与您的程序链接起来—对于有两个这样的库并且它们都定义了一个公共符号的情况,有什么解决方案?链接器只会解决这个问题,选择一个或另一个定义,然后让您处理这个问题。如何处理应用程序的链接阶段?如果直接链接.o文件,而不是在链接最终应用程序之前将其放入中间库,则可能会获得更好的结果。 This page ARM文档中很好地描述了这个问题—我希望在您的案例中也会发生类似的行为:
编辑:更多的搜索发现此问题是由于违反了“ One Definition Rule ,因此不需要编译器/链接器通知您该问题。所以你的问题是 this one . |
|
|
2
0
第二个示例可能相当于第一个在常量前面有一个额外的外部。在第一种情况下,编译器可能结合了extern的两种用法。在第二种情况下,我假设编译器不会出于任何原因将外部作用域extern中的所有内容强制插入。 |