使用多个文件时出现“体系结构x86_64的未定义符号”错误

时间:2019-11-17 14:13:42

标签: c++

导入标头时出现此错误,但找不到原因(此处为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;
}

add.cpp:

#include "add.h"

int myAddition(int nb1, int nb2)
{
    return nb1+nb2;
}

add.h:

int myAddition(int nb1, int nb2);

当我尝试编译main.cpp(在OS X 10.12.6中使用Atom和“ gpp-compiler”加载项)时,出现此错误:

  

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

它也说:

  

未捕获的回调必须是一个函数

堆栈跟踪为:

  

TypeError [ERR_INVALID_CALLBACK]:回调必须是一个函数       在maybeCallback(fs.js:157:9)       在Object.fs.writeFile(fs.js:1290:14)       在ChildProcess.child.on(/Users/sessiondel/.atom/packages/gpp-compiler/index.js:299:12)       在ChildProcess.emit(events.js:182:13)       在也许关闭(internal / child_process.js:961:16)       在Socket.stream.socket.on(内部/child_process.js:380:11)       在Socket.emit(events.js:182:13)       在Pipe._handle.close [作为_onclose](net.js:596:12)

谢谢!

2 个答案:

答案 0 :(得分:1)

在C ++中,如果要编译位于多个文件中的某些代码,则必须明确告知编译器在哪里可以找到某些函数,在这种情况下为函数add,因此为了为此,您必须以这种方式在编译器中指定文件:

g++ main.cpp add.cpp 

,在编译后,编译器将使用编译后的文件生成一个a.out文件,并运行./a.out

也许不是Atom的C ++ IDE,Atom只是尝试编译该文件,而C ++编译器找不到object file(扩展名为.o)中的函数。

答案 1 :(得分:1)

尝试一下

    g++ -c add.cpp
    g++ -c main.cpp
    g++ add.o main.o -o exe_name