这可能很小,但是我很好奇这个原因。
这来自我 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 。