【发布时间】:2016-01-03 04:39:32
【问题描述】:
我正在开发一个在另一台计算机(第一台)上运行的程序,并试图让它在我的新计算机(第三台)上运行。当我转到build 并输入ccmake .. 时,我收到此错误:
CMake Error at build/share/cmake/hdf5/hdf5-targets.cmake:67 (message):
The imported target "hdf5" references the file
"/home/myname/Desktop/MyProject/build/lib/libhdf5.a"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
"/home/myname/Desktop/MyProject/build/share/cmake/hdf5/h
df5-targets.cmake"
but not all the files it references.
Call Stack (most recent call first):
build/share/cmake/hdf5/hdf5-config.cmake:70 (INCLUDE)
build/share/cmake/hdf5/FindHDF5.cmake:85 (INCLUDE)
src/Thing/CMakeLists.txt:66 (find_package)
即使我随后使用 sudo apt-get 安装了 hdf5,我也遇到了同样的错误
我不得不删除 lib 目录,因为它包含过时的 boost 文件并导致大量错误,可能是因为我在这个新的 usr/lib 和 usr/include 中新安装了 boost 文件后发生了冲突计算机。我只需删除 lib 目录就可以让这个程序在第二台计算机上运行
解决这个问题的方法是更改CMakeLists.txt,使其引用新安装的hdf5的目录吗? CMakeLists.txt 看起来像:
CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
PROJECT (Projectname)
# CMake Modules
SET(CMAKE_MODULE_PATH
${PROJECT_BINARY_DIR}/share/cmake/hdf5
${CMAKE_SOURCE_DIR}/CMake
${CMAKE_MODULE_PATH})
SET(ENV{HDF5_ROOT_DIR_HINT} ${PROJECT_BINARY_DIR})
# Build output
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib")
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin")
mark_as_advanced(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH)
#other stuff I excluded to keep this brief
此外,即使我删除了home/myname/Desktop/MyProject/build/lib 的lib 目录中除libhdf5.a 之外的所有文件,我也会收到一堆提升错误。这是一个很长的输出,我认为这是因为make 在lib 中创建了最初来自home/myname/Desktop/MyProject/build/lib 的新boost 文件,而不是在usr/lib 和usr/include 中引用新安装的boost 文件
如果有帮助,src/Thing/CMakeLists.txt 的第 66 行看起来像find_package(HDF5 COMPONENTS C CXX)
如有必要,我也可以发布hdf5-config.cmake 和FindHDF5.cmake 的内容
编辑:dpkg -l | greap hdf5 给出
ii hdf5-helpers 1.8.15-patch1+docs-4 amd64 Hierarchical Data Format 5 (HDF5) - Helper tools
ii hdf5-tools 1.8.15-patch1+docs-4 amd64 Hierarchical Data Format 5 (HDF5) - Runtime tools
ii libhdf5-10:amd64 1.8.15-patch1+docs-4 amd64 Hierarchical Data Format 5 (HDF5) - runtime files - serial version
ii libhdf5-cpp-10:amd64 1.8.15-patch1+docs-4 amd64 Hierarchical Data Format 5 (HDF5) - C++ libraries
ii libhdf5-dev 1.8.15-patch1+docs-4 amd64 Hierarchical Data Format 5 (HDF5) - development files - serial version
ii libhdf5-openmpi-10:amd64 1.8.15-patch1+docs-4 amd64 Hierarchical Data Format 5 (HDF5) - runtime files - OpenMPI version
ii libhdf5-openmpi-dev 1.8.15-patch1+docs-4 amd64 Hierarchical Data Format 5 (HDF5) - development files - OpenMPI version
ii libhdf5-serial-dev 1.8.15-patch1+docs-4 all transitional dummy package
【问题讨论】:
-
您是否安装了
libhdf5-dev?sudo apt-get install libhdf5-dev -
我用
sudo apt-get install libhdf5-serial-dev安装了它。当我尝试sudo apt-get install libhdf5-dev时,它会说libhdf5-dev is already the newest version. -
packages.debian.org/source/wheezy/hdf5 说这是一个过渡包。我会确保所有必要的开发文件实际上都在 FS 中。
dpkg -l | grep hdf5然后检查每个-dev包的内容与dpkg -L列出。 -
顺便说一句,你的最终目标是什么?如果 libhdf5 安装在目标计算机上,您是否打算链接到静态库以避免需要打扰?是的,如果您在树中的某处使用自定义 libhdf5,那么您不应该将它与安装在系统范围内的头文件混合使用。因此,在这种情况下,为了简单起见,您应该至少在一段时间内删除所有 libhdf5*-dev 包,然后根据构建树中的库头构建程序。
-
对不起,我对 linux 还很陌生,所以我不太了解你所说的。我把
dpkg -l | grep hdf5的内容贴在了OP里。我不确定如何通过为每个-dev包使用dpkg -L找到必要的丢失文件?
标签: linux boost makefile cmake