海湾合作委员会将外部连接不正确
gcc linking externs incorrectly?
我对GCC的新手相对较新,我正在使用'GCC(TDM-1(5.1.0'。我遇到了一个非常奇特的情况。我对一个非常小的可重复的例子缩小了我的关注...
main.cpp
extern int g;
int main(){
return g;
}
somotherfile.cpp
#include<windows.h>
RECT g;
我用
编译这个gcc -c someOtherFile.cpp
gcc main.cpp someOtherFile.o
这将链接而不会出错。
我在这里错过了为什么允许链接的东西?
3.5/10:
在所有类型的调整(在其中typedefs(7.1.3(被其定义替换(之后,所有参考给定变量或函数的声明指定的类型均应相同,除非数组对象的声明可以指定阵列类型因存在或不存在主要阵列结合而异(8.3.4(。违反此类型身份规则不需要诊断。
最后一句话意味着编译器和链接器不需要给您错误消息。保持直率是您的工作。
在C 中它不会链接,因为g
的类型是main.cpp和hotherfile.cpp之间的不匹配。您必须在某个hotherfile.cpp中或对面有 int g
, extern RECT g;
in main.cpp。
在C中,这将编译和链接,但在C 中。com编译和链接为C :
g++ -c someOtherFile.cpp
g++ -c main.cpp
g++ main.o someOtherFile.o -o test
另外,您可以为此使用功能:
main.cpp
int g();
int main{
return g();
}
somotherfile.cpp
#include<windows.h>
RECT r;
int g()
{
return (int)r;
}
显然不建议使用(因为没有太多的要点对int的矩(,但这与您尝试做的事情相似。
someOtherFile.cpp
内部的变量g
与main.cpp中声明的其他extern int g
无关。实际上,int g
根本没有在任何地方定义,因此链接将在最后失败。
显然,这实际上将通过G 进行编译和链接,而Microsoft Linker会在此类型的错误上错误。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 在函数内部的声明中初始化数组,并在外部使用它
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- C++:来自外部文件的Trivia
- 从函数角度看ID到文件路径的内部与外部映射
- C++:将外部库链接到dll库
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 节俭并发:未解决的外部问题
- 如何在c++中从git建立外部库
- 海湾合作委员会将外部连接不正确
- nanodbc 错误 LNK2019:未解析的外部符号 - 在基本连接上
- 在本地网络中从外部计算机到计算机的连接
- 将Raspberry Pi 2与外部远程数据库连接
- C++从外部设备读取数据 - 连接:光电USB
- 连接到外部 IP 失败
- Android 本机可执行文件如何接受外部套接字连接
- 从c++连接MySQL:错误LNK2001:未解析的外部符号
- 使用c++和函数_main中引用的[ERROR]未解析的外部符号_mysql_error@4连接mysql