1
我有一個好奇的「架構未定義符號」的例子,雖然這裏已經被問過很多次,但是我覺得我的錯誤背後的原因更基礎。架構錯誤的未定義符號
我是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
這工作得很好之前,我開始使用內部main
的Point3D
類,但現在我看到的錯誤
-- 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上運行此操作。
這個工作!謝謝。有沒有辦法引用一個目錄中的所有文件,如果我結束了很多類。 – clicky
我不這樣做在我自己的項目,但這篇文章似乎有一些合理的建議:http://stackoverflow.com/questions/2110795/how-to-find-all-c-files-for-cmake-構建系統 –