使用 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 )