在Atom中搭建C++项目遇链接错误,求Linux下解决办法
解决Atom中C++项目的"undefined reference"链接错误
嘿,我一眼就认出这个错误了——这是链接器找不到函数实现的典型问题,和你用Atom还是VS没关系,主要是编译/链接的流程没搞对。
问题原因
你写的代码本身没问题,hash.h声明了Hash函数,hash.cpp也实现了它,但问题出在编译环节:你大概率只编译了main.cpp,没把hash.cpp一起纳入编译流程。链接阶段需要把所有用到的函数实现的目标文件整合在一起,找不到hashCustom::Hash的实现代码,就会报这个错。
VS里不会出现这个问题,是因为VS的项目系统会自动把所有添加到项目里的.cpp文件都纳入编译和链接流程,但Atom默认的编译工具(比如常用的script插件)只会编译当前打开的单个文件,所以就漏了hash.cpp。
解决方法
方法1:用终端手动编译(最直接)
根据你代码里的路径,推测你的项目结构大概是这样:
你的项目文件夹/ ├── Header Files/ │ └── hash.h └── Source Files/ ├── hash.cpp └── main.cpp
打开终端,进入你的项目根目录,运行这条命令:
g++ "./Source Files/main.cpp" "./Source Files/hash.cpp" -o hash_demo
这条命令会把两个源文件都编译,然后链接成一个叫hash_demo的可执行文件。接着运行:
./hash_demo
就能看到输出6了(因为"Number"的长度是6)。
方法2:配置Atom的script插件(适合日常开发)
如果你习惯用Atom的script插件直接运行代码,需要修改它的编译命令:
- 打开Atom的设置面板(快捷键
Ctrl+,),找到script插件的设置项。 - 在Command输入框里,把默认的
g++ $file -o $file_base_name改成包含所有源文件的命令,对应上面的结构就是:g++ "./Source Files/main.cpp" "./Source Files/hash.cpp" -o $file_base_name - 保存配置后,回到
main.cpp,用你设置的script运行快捷键(默认是Ctrl+Shift+B)执行,就能正常编译链接了。
如果你的项目结构和推测的不一样,只要把命令里的.cpp文件路径改成你实际的路径就行——核心就是要把所有用到的源文件都加到编译命令里。
内容的提问来源于stack exchange,提问作者Rami Chasygov
相关产品推荐
相关产品推荐

