Mac中的链接器错误

时间:2018-05-17 06:00:14

标签: c++

我有一个关于我一直试图在MacOS中编译的C ++代码的问题。在我继续解释我的问题之前,我应该提到我对编程很新(实际上是数学家),并且我试图快速理解某人现有的代码来理解问题 - 而且因为我是新手,所以我很丢失。所以任何帮助都深表感谢。如果我解释问题的方式不正确,(我道歉并且请)告诉我,以便我可以适当地改变它。

我不会在这里添加完整的代码,因为它的文件太多,而是当我尝试通过终端编译它时的最终错误。这段代码完美地编译在Linux上但不在我的Mac上。

Undefined symbols for architecture x86_64:
"Algorithm_langevin::compute_traj(gaussien&, input&, particle&)", referenced 
from:
_main in main-1aa316.o
"Algorithm_langevin::Algorithm_langevin(input&)", referenced from:
_main in main-1aa316.o
"input::load()", referenced from:
_main in main-1aa316.o
"gaussien::gaussien()", referenced from:
_main in main-1aa316.o
"particle::particle(input const&)", referenced from:
_main in main-1aa316.o
"vtable for hamiltonian_cg", referenced from:
hamiltonian_cg::hamiltonian_cg() in main-1aa316.o
NOTE: a missing vtable usually means the first non-inline virtual member 
function has no definition.
"vtable for hamiltonian_full", referenced from:
hamiltonian_full::hamiltonian_full() in main-1aa316.o
NOTE: a missing vtable usually means the first non-inline virtual member 
function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)          

如前所述,此代码在Linux机器上运行,但在我的Mac上运行。这是因为标准库目录有一些区别吗?

同样,如果这个问题被提出或者答案很简单,我真的很抱歉。任何指示我都会感激不尽。

1 个答案:

答案 0 :(得分:0)

您需要在链接步骤中链接这样的内容:

g++ main.cpp gaussien.o hamiltonian_full.o ... xxx.o -o main

我假设您已经编译了这些目标文件。你真的应该让自己成为整个过程的Makefile

哦顺便说一句,您将在Linux下看到相同的链接器错误,我只是运行g++ main.cpp