这可能很小,但是我很好奇这个原因。

这来自我 friend 的练习代码:

#include <iostream>

using namespace std ;
extern int* PPPP;

void main(){
    cout<<"*PPPP"<<*PPPP<<endl;
}

错误地,实际上没有声明PPPP。
但奇怪的是我们可以将其编译为静态库。
但是,我们不能将其放入dll中,存在链接错误(无法解析的外部sysmbol pppp)

我们猜测是因为当创建静态库时,名称PPPP(尽管extern)确实在内存中有空间,因此,这不会发生任何问题。

我们对此完全不确定。我们希望听到更多有关此的准确信息。

提前致谢。

最佳答案

静态库旨在链接到另一组文件,因此它可以包含 undefined symbol ,因为这些符号将在以后的阶段进行解析(或不解析,在这种情况下会出现链接器错误)。

但是,DLL与可执行文件一样,需要完全链接,因此不能包含任何 undefined reference 。

10-01 11:09