使用 Clion 发布 2013 年的 运行 c++ 代码
Issue running c++ code from 2013 using Clion
[本人对c++经验甚少,时隔10多年第一次使用]
我需要 运行 一些 2013 年的 C++ 代码,但我在这样做时遇到了问题。我在 OSX Monterey(M1 硅芯片)上使用 Clion。如果我 运行 一个非常简单的脚本(下面的 main.cc),我会得到错误
Undefined symbols for architecture arm64:
"Hair::read(char const*, bool)", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture arm64
这是因为我尝试 运行 的代码是用与我用来编译它的版本不同的 c++ 版本编写的吗?还是与我使用的架构有关的问题?谢谢!
数据集和原始代码可用here。
main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <Hair.h>
using namespace cv;
using namespace std;
int main() {
const char *path = "strands00001.data";
Hair hair;
hair.read(path, false);
return 0;
}
这是我要调用的函数:
bool Hair::read(const char *filename, bool flip_strands /* = false */)
{
bool ok = ends_with(filename, ".data") ?
read_bin(filename) : read_asc(filename);
if (!ok)
return false;
if (flip_strands) {
int nstrands = strands.size();
for (int i = 0; i < nstrands; i++)
reverse(strands[i].begin(), strands[i].end());
}
// Look for a .xf file, and apply it if found
xform xf;
if (xf.read(xfname(filename)))
apply_xf(xf);
return true;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( OpenCVTest )
find_package(OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( OpenCVTest main.cpp )
target_link_libraries( OpenCVTest ${OpenCV_LIBS})
问题与体系结构或C++版本无关。找不到 Hair::read
的定义,因为您的 CMakeLists.txt
没有编译包含它的文件。你需要告诉它编译 Hair.cpp
除了 main.cpp
,像这样:
add_executable( OpenCVTest main.cpp Hair.cpp )
[本人对c++经验甚少,时隔10多年第一次使用]
我需要 运行 一些 2013 年的 C++ 代码,但我在这样做时遇到了问题。我在 OSX Monterey(M1 硅芯片)上使用 Clion。如果我 运行 一个非常简单的脚本(下面的 main.cc),我会得到错误
Undefined symbols for architecture arm64:
"Hair::read(char const*, bool)", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture arm64
这是因为我尝试 运行 的代码是用与我用来编译它的版本不同的 c++ 版本编写的吗?还是与我使用的架构有关的问题?谢谢!
数据集和原始代码可用here。
main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <Hair.h>
using namespace cv;
using namespace std;
int main() {
const char *path = "strands00001.data";
Hair hair;
hair.read(path, false);
return 0;
}
这是我要调用的函数:
bool Hair::read(const char *filename, bool flip_strands /* = false */)
{
bool ok = ends_with(filename, ".data") ?
read_bin(filename) : read_asc(filename);
if (!ok)
return false;
if (flip_strands) {
int nstrands = strands.size();
for (int i = 0; i < nstrands; i++)
reverse(strands[i].begin(), strands[i].end());
}
// Look for a .xf file, and apply it if found
xform xf;
if (xf.read(xfname(filename)))
apply_xf(xf);
return true;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( OpenCVTest )
find_package(OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( OpenCVTest main.cpp )
target_link_libraries( OpenCVTest ${OpenCV_LIBS})
问题与体系结构或C++版本无关。找不到 Hair::read
的定义,因为您的 CMakeLists.txt
没有编译包含它的文件。你需要告诉它编译 Hair.cpp
除了 main.cpp
,像这样:
add_executable( OpenCVTest main.cpp Hair.cpp )