vscode中使用extern关键字出现undefined reference to的问题
在按照c++ pp page255,尝试在一个cpp文件(翻译单元)中定义具有外部链接性的静态变量int x = 1,在另一个cpp文件中用 extern int x;引用声明时,运行会出现undefined reference to 'x'的错误。
两个文件分别如下:
接着F5编译,出现:
这时候,我们排查错误应该看最下面控制台中的红框中的问题。
解决该问题,参考
https://blog.csdn.net/squall0984/article/details/107637986
https://blog.csdn.net/weixin_45514968/article/details/119153141
可以看出有两个解决方法,本文不下载code-runner插件,而采用第一篇文章的方法。
问题的原因是vscode默认只能单文件编译,因此在编译 hello1.cpp时,并未编译hello.cpp。
在tasks.json中修改:
tasks.json文件中的args参数,实际上就是调用gcc时,后面所跟的参数在初始的配置中,实际上编译器执行的命令为gcc -g main.c -o main.exe,而修改后的配置中,执行的命令是gcc -g main.c hello.c -o main.exe,这是由于参数${file}代表的是被编译的当前文件,而参数${fileDirname}\\*.cpp代表的是当前目录下的所有.cpp文件。
因此这样修改之后,当前目录下所有的cpp文件都会被编译;
修改好后运行,如下图所示:
其中要注意的是,特意把hello.cpp和hello1.cpp单独放在了externtest2的目录下,这是因为如果放到有别的cpp文件的目录下,会将这些cpp文件也一起编译,这就会导致不同cpp文件中的main()函数等发生冲突,如我们在hello.cpp中也加上main()函数:
接着编译hello.cpp:
可以看到报错,在hello1.cpp中重复定义了main()函数,main()函数在hello.cpp中就进行了第一次定义。
因此,在运行有多个cpp文件的目录中的cpp文件时,还是将tasks.json中的配置改回来;在需要写有关外部引用的程序时,需要单独建立目录来存放cpp文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现