这可能很小,但我很好奇这个原因.
这来自我朋友的练习代码:
#include <iostream>
using namespace std ;
extern int* PPPP;
void main(){
cout<<"*PPPP"<<*PPPP<<endl;
}
Run Code Online (Sandbox Code Playgroud)
错误地,PPPP实际上是无处宣布的.但奇怪的是我们可以将其编译成静态库.但是,我们不能把它变成一个dll,有链接错误(未解析的外部sysmbol pppp)
我们猜测是因为在创建一个静态库时,PPPP(虽然extern)这个名字在内存中确实有一个空间,所以,这没有问题.
我们根本不确定这一点.我们希望能够听到更多更准确的信息.
提前致谢.
静态库旨在链接到另一组文件,因此它可以包含未定义的符号,因为这些符号将在稍后阶段解析(或者不会,在这种情况下会出现链接器错误).
但是,DLL就像可执行文件一样,需要完全链接,因此不能包含任何未定义的引用.