在 Windows 中构建 NIfTI C 库:未定义的引用?

问题描述 投票:0回答:1

我正在使用 MinGW gcc 14.2.0 和 CMake 3.30.3 在 Windows 上构建 NIfTI C 库。我注意到两件事:

1:我之前使用相同的构建工具编译了 Z 库 libz.dll.a,尽管自动找到了该库的路径并且我设置了包含

zlib.h
的包含目录,但“znz”的编译“打开
.nii
.nii.gz
文件所需的库失败。我可以通过将目录添加到
CMAKE_C_FLAGS
变量来实现此目的(只是为了确保也添加到
CMAKE_CXX_FLAGS
)。
2:现在我可以编译静态库,包括可执行文件etc。,但是当我检查
BUILD_SHARED_LIBS
标志来构建DLL时,在成功构建
libznz.dll
libnifticdf.dl
libniftiio.dll
second_test.exe
之后,
nifti_stats.exe
nifti1_test.exe
构建
first_test.exe
失败并出现错误:

ld.exe: CMakeFiles\nifti_stats.dir/objects.a(nifti_stats.c.obj):nifti_stats.c (.text.startup+0x27c): undefined reference to `nifti_intent_code'
ld.exe: CMakeFiles\nifti_stats.dir/objects.a(nifti_stats.c.obj):nifti_stats.c:(.text.startup+0x2f8): undefined reference to `nifti_stat2hzscore'
ld.exe: CMakeFiles\nifti_stats.dir/objects.a(nifti_stats.c.obj):nifti_stats.c:(.text.startup+0x34f): undefined reference to `nifti_stat2cdf'
ld.exe: CMakeFiles\nifti_stats.dir/objects.a(nifti_stats.c.obj):nifti_stats.c:(.text.startup+0x40a): undefined reference to `nifti_stat2rcdf'
ld.exe: CMakeFiles\nifti_stats.dir/objects.a(nifti_stats.c.obj):nifti_stats.c:(.text.startup+0x45a): undefined reference to `nifti_cdf2stat'
ld.exe: CMakeFiles\nifti_stats.dir/objects.a(nifti_stats.c.obj):nifti_stats.c:(.text.startup+0x508): undefined reference to `nifti_stat2zscore'
ld.exe: CMakeFiles\nifti_stats.dir/objects.a(nifti_stats.c.obj):nifti_stats.c:(.text.startup+0x5e7): undefined reference to `nifti_stat2cdf'
ld.exe: CMakeFiles\nifti_stats.dir/objects.a(nifti_stats.c.obj):nifti_stats.c:(.text.startup+0x607): undefined reference to `nifti_stat2cdf'
collect2.exe: error: ld returned 1 exit status

有谁明白吗

  • 为什么将 NIfTI 库构建为 DLL 会导致仅其中 1 个程序出现此链接错误?
  • 为什么ZNZ库的编译不使用
    CMakeLists.txt
    中的目录信息?
cmake shared-libraries ld mingw-w64 nifti
1个回答
0
投票

-DBUILD_TESTING:BOOL=OFF
添加到
cmake
命令行,以便在使用
-DBUILD_SHARED_LIBS:BOOL=ON

构建时跳过构建这些测试
© www.soinside.com 2019 - 2024. All rights reserved.