我对“建筑的 undefined symbol ”感到好奇,虽然在这里曾被问过无数次,但我觉得我的错误背后的原因更为根本。
我是C++的新手,并且有一个非常基本的程序,没有使用任何第三方库,因此,我不明白为什么会这样,因为提到了这个问题的其他答案,这与混合使用不同编译器构建的库有关。
这是我的全部代码
src / myTest.cpp
#include <iostream>
#include "Point3D.h"
using namespace std;
using namespace lspsm;
int main(int argc, char** argv) {
Point3D p(1,2,3);
cout << p.getX() << endl;
return 0;
}
src / Point3D.h
#ifndef Point3D_H
#define Point3D_H
namespace lspsm {
class Point3D {
int p_values [3];
public:
Point3D(int x, int y, int z);
int getX();
int getY();
int getZ();
};
}
#endif
src / Point3D.cpp
#include Point3D_H
namespace lspsm {
Point3D::Point3D(int x, int y, int z) {
p_values[0] = x;
p_values[1] = y;
p_values[2] = z;
}
int Point3D::getX() {
return p_values[0];
}
int Point3D::getY() {
return p_values[1];
}
int Point3D::getZ() {
return p_values[2];
}
}
src / CMakeLists.txt
add_executable(myTest myTest.cpp)
在构建中,我运行
cmake ../src
make
在我开始在
Point3D
中使用main
类之前,此方法运行良好,但现在我看到了错误-- Configuring done
-- Generating done
-- Build files have been written to: /Users/mh/dev/CPP/build
[ 50%] Linking CXX executable myTest
Undefined symbols for architecture x86_64:
"lspsm::Point3D::getX()", referenced from:
_main in myTest.o
"lspsm::Point3D::Point3D(int, int, int)", referenced from:
_main in myTest.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我是否为
Point3D
写了错误的类实现?我正在使用make 3.81在OS X Sierra上运行它。
最佳答案
在CMakeLists.txt
中,还需要将Point3D.cpp
添加到add_executable
来源列表中:
add_executable(myTest myTest.cpp Point3D.cpp)
关于c++ - 架构错误的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43308066/