项目中的链接错误

Linkage error in Project

我有一个项目,其结构按以下方式定义(link 项目是 here):

project_source/
    CMakeLists.txt
    .gitignore
    src/
        main.cpp -> main program file
        windows/  -> contains Unix header implementations for Windows
            CMakeLists.txt
            dirent.h
            getopt.cpp
            getopt.h
        classes/ -> custom class directory
            CMakeLists.txt
            utlities.cpp
            utilities.h
            itk/ -> classes using ITK
                CMakeLists.txt
                basicITK.cpp
                basicITK.h

我正在尝试使用 basicITK.h 中声明的函数 basic::GetImageInfo() 但编译器给出了 linkage 错误,说"undefined reference to GetImageInfo()" 在 GCC 和 MSVC 2012 中。我很困惑,因为当我试图从 main.cpp 使用 [=45= 去定义这个函数时](通过按 F12),它能够完美地定义定义(这表明包含没有任何问题)。同样,当我从 utilities.h 调用 basic::fileExists() 时,它工作正常。

我也尝试过使用 CMakeLists 将文件夹 /classes/itk/ 直接作为包含,但即使这样也行不通。但是,当我将 basicITK class 移动到 /classes/ 下时,它工作得很好。但是,我宁愿保留一个隔离的文件夹结构以简化未来的扩展。

如有任何帮助,我们将不胜感激!提前致谢。

更新:

为方便起见,我已从项目中删除了 ITK 依赖项。现在,basic::GetImageInfo() 具有与 basic::fileExists() 相同的功能。

ld 给出 'undefined reference' 当有函数声明但没有实现时。函数 'GetImageInfo' 在 'basicITK.h' 中声明,但实现位于静态库(或 DLL - 如果您使用 Windows)中,您在 [=18] 期间没有告诉 ld 包含它=]ing。你必须 运行 ld 有一个选项告诉它 link 外部库到你的程序(例如,在一些 Linux 操作系统上这个选项是 '-ldefined library name',所以如果我的程序使用 zlib,那么我必须 运行 ld with '-lz' 选项)。

我通过从主 CMakeLists 将 CMake link 改为 /classes/itk/ 来解决这个问题。如果有人有兴趣,我会保留 github project page public.

感谢@SNC 的回答,但这并不是我想要的。