编译器如何处理外部变量

Rob*_*ean 2 c++ dll extern

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

这来自我朋友的练习代码:

#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)这个名字在内存中确实有一个空间,所以,这没有问题.

我们根本不确定这一点.我们希望能够听到更多更准确的信息.

提前致谢.

Som*_*ude 5

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

但是,DLL就像可执行文件一样,需要完全链接,因此不能包含任何未定义的引用.