gpt4 book ai didi

c++ - 项目中的链接错误

转载 作者:行者123 更新时间:2023-11-28 06:24:27 29 4
gpt4 key购买 nike

我有一个项目,其结构按以下方式定义(项目链接为 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() 但是编译器给出了一个链接错误,说“ undefined reference 到 GCC 和 MSVC 2012 中的 GetImageInfo()"。我很困惑,因为当我尝试使用 Visual Studio(通过按 F12)从 ma​​in.cpp 转到此函数的定义时,它是能够完美地定义定义(这表明包含没有任何问题)。同样,当我从 utilities.h 调用 basic::fileExists() 时,它工作正常。

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

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

更新:

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

最佳答案

当有函数声明但没有实现时,ld 会给出“ undefined reference ”。函数“GetImageInfo”在“basicITK.h”中声明,但实现位于静态库(或 DLL - 如果您使用 Windows)中,您在链接期间没有告诉 ld 包含它。您必须运行 ld 并带有一个选项,该选项告诉它将外部库链接到您的程序(例如,在某些 Linux 操作系统上,此选项是“-l定义的库名称”,因此如果我的程序使用 zlib例如,然后我必须使用“-lz”选项运行 ld)。

关于c++ - 项目中的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28750831/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com