我正在做一个DICOMViewer小项目,由于VTK本身的vtkDICOMImageRead不支持压缩格式,因此我又打了一个GDCM(3.2.1版本,cmake是3.29.2)的三方库,用于读取dicom文件,但是在正式项目却用不了,说什么没有.dll文件(我看了一下bin文件夹,还真没有),不知道哪里出了问题,网上找了一圈也没找到,麻烦各位大佬看一看,万分感谢。 1.首先是cmake编译:


点击Configure之后的配置:

后续的VS构建以及安装都没有报错,最后也是成功生成了相关文件:



项目中我是放在了这:

使用的话主要是在civMain中使用的:

# -------------------------------------------------------------
# GDCM 3rdparties.cmake
# -------------------------------------------------------------
# 根据平台与编译类型选择 GDCMConfig.cmake 路径
if(WIN32)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(_GDCM_DIR ${_3RD_ROOT}/gdcm/gdcm_3.2.1-Debug/lib/gdcm-3.2)
else()
set(_GDCM_DIR ${_3RD_ROOT}/gdcm/gdcm_3.2.1-Release/lib/gdcm-3.2)
endif()
else()
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(_GDCM_DIR ${_3RD_ROOT}/gdcm/gdcm_3.2.1-Debug/lib/gdcm-3.2)
else()
set(_GDCM_DIR ${_3RD_ROOT}/gdcm/gdcm_3.2.1-Release/lib/gdcm-3.2)
endif()
endif ()
set(GDCM_DIR ${_GDCM_DIR} CACHE PATH "Path to GDCMConfig.cmake" FORCE)
find_package(GDCM REQUIRED)
add_library(3rdparty_GDCM INTERFACE)
add_library(3rdparty::GDCM ALIAS 3rdparty_GDCM)
# 使用 GDCM CMake 包生成的 IMPORTED 目标可确保链接时带有完整路径,避免找不到 lib 文件
target_include_directories(3rdparty_GDCM INTERFACE
${GDCM_INCLUDE_DIRS}
${GDCM_INCLUDE_DIRS}/vtk-9.0
)
target_link_directories(3rdparty_GDCM INTERFACE ${GDCM_LIBRARY_DIRS})
target_link_libraries(3rdparty_GDCM INTERFACE
gdcmjpeg8
gdcmjpeg12
gdcmjpeg16
gdcmexpat
gdcmopenjp2
gdcmcharls
gdcmzlib
gdcmgetopt
socketxx
gdcmCommon
gdcmDICT
gdcmDSED
gdcmIOD
gdcmMSFF
gdcmMEXD
vtkgdcm-9.0
)
message(${GDCM_INCLUDE_DIRS})
if(UNIX)
# 1. 明确库目录
get_filename_component(GDCM_LIB_DIR "${GDCM_INCLUDE_DIRS}/../lib/" ABSOLUTE)
message(GDCM_LIB_DIR ${GDCM_LIB_DIR})
# 2. 把 rpath 挂到 3rdparty_GDCM
target_link_options(3rdparty_GDCM INTERFACE -Wl,-rpath,${GDCM_LIB_DIR})
target_link_options(3rdparty_GDCM INTERFACE -Wl,-rpath-link,${GDCM_LIB_DIR})
endif()# 链接common库 + VTK 库
target_link_libraries(civMain PUBLIC
3rdparty::GDCM
)
# Windows 平台下拷贝 需要的第三方库 DLL
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
message(STATUS "正在拷贝QT DLL")
set(DEBUG_SUFFIX)
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG_SUFFIX "d")
endif ()
set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
endif ()
endif ()
# 平台插件
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET civMain POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:civMain>/plugins/platforms/")
add_custom_command(TARGET civMain POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:civMain>/plugins/platforms/")
endif ()
add_custom_command(TARGET civMain POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:civMain>/plugins/imageformats/")
add_custom_command(TARGET civMain POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/imageformats/qjpeg${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:civMain>/plugins/imageformats/")
# 常用 Qt DLL
foreach (QT_LIB Core Gui Widgets Network WebSockets Concurrent)
add_custom_command(TARGET civMain POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:civMain>")
endforeach ()
# ---------------- 拷贝 GDCM DLL ----------------
message(STATUS "配置拷贝 GDCM DLL 指令 (按构建配置自动切换)")
add_custom_command(TARGET civMain POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/3rd/windows/gdcm/gdcm_3.2.1-$<CONFIG>/bin"
"$<TARGET_FILE_DIR:civMain>")
endif ()写在项目中的代码没有报红,按住ctrl也是能正常进去的:

但是一旦运行就会说这个dll找不到,项目也跑不起来:

看之前的图片,我打的库里面确实没有这个文件,是我打的库有问题吗,还是什么原因,恳请大佬解答,万分感谢!
相似问题