使用多个文件时出现"Undefined symbols for architecture x86_64"错误

"Undefined symbols for architecture x86_64" error when using multiple files

本文关键字:architecture for symbols x86 错误 Undefined 文件      更新时间:2023-10-16

导入标头时出现此错误,找不到原因(此处为C++新手(。

main.cpp:

#include <iostream>
#include <string>
#include "add.h"
using namespace std;
int main()
{
cout << "The addition result is " << myAddition(2,3) << endl;
return 0;
}

添加.cpp:

#include "add.h"
int myAddition(int nb1, int nb2)
{
return nb1+nb2;
}

add.h:

int myAddition(int nb1, int nb2);

当我试图编译main.cpp(使用Atom和OSX10.12.6中的"gpp编译器"插件(时,我得到了以下错误:

体系结构x86_64的未定义符号:"myAddition(int,int(",引用自:_main-a2ca70.o中的mainld:找不到体系结构x86_64的符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用(

它还说:

未捕获回调必须是函数

堆栈跟踪是:

TypeError[ERR_INVALID_CALLBACK]:回调必须是一个函数在五月回调(fs.js:157:9(位于Object.fs.writeFile(fs.js:129:14(位于ChildProcess.child.on(/Users/sessiondel/.atom/packages/gpp编译器/index.js:299:12(在ChildProcess.emit(events.js:182:13(在maybeClose(internal/child_process.js:961:16(位于Socket.stream.Socket.on(internal/child_process.js:380:11(在Socket.eemit(events.js:182:13(在管道处_handle.close[as _onclose](net.js:596:12(

提前感谢!

在C++中,如果你想编译位于多个文件中的一些代码,你必须明确地告诉编译器在哪里可以找到某个函数,在这种情况下是函数add,所以为了实现这一点,你必须以这种方式在编译器中指定文件:

g++ main.cpp add.cpp 

编译完成后,编译器会用编译后的文件生成一个a.out文件,只需执行./a.out即可运行。

Atom可能不是c++的IDE,只是试图编译该文件,而c++编译器在object file(.o扩展名(中找不到函数add。

试试这个,

g++ -c add.cpp
g++ -c main.cpp
g++ add.o main.o -o exe_name
相关文章: