我正在开发另一台计算机上的程序(第一个),并试图让它在我的新计算机上工作(第三个)。 当我去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如下所示:
尽pipe在user-config.jam中定义了,但为arm提升交叉编译,工具集无法识别
ECDSA证书问题提升asio
版本'CXXABI_1.3.8'找不到(需要…)
./configure–with-boost没有这样的文件或目录
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的libhdf5.a以外的所有libhdf5.a ,我也遇到了一些boost错误。 它是一个非常长的输出,我认为它是因为在lib中创build新的boost文件,这些文件最初来自home/myname/Desktop/MyProject/build/lib ,而不是引用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 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
提升日志,GCC 4.4和CMake
提升安装
在Ubuntu中查找Boost库
卸载boost并安装另一个版本
在Linux上链接第三方库的简短介绍:
一般来说你应该决定两个方面。
第一个是关于“系统vs定制库”
您可以将您的应用程序与从系统软件包安装的库链接(在Debian中使用apt-get )。 这是在Linux上编译程序的首选方式,除非您有一些原因(见下文)。 通常这也是最简单的方法,因为所有的构建工具都被配置为在某些“众所周知”的地方找到库组件。
链接到一个库的自定义生成。 如果您需要库的一些自定义生成选项,或者需要特定版本的库在替代库中不可用等,请使用此方法。
第二步是在静态和动态库之间进行选择。
通常在Linux应用程序中链接到动态加载的库( .so )。 这减少了应用程序的大小, 可能会减少内存消耗和应用程序加载时间(因为给定应用程序的库已经在内存中),有时会简化小的更新,如安全修复 – 只需要更新一个库而不是所有使用此应用程序的应用程序脆弱的图书馆
但也有缺点:)如果您计划将与动态库链接的应用程序分发到其他计算机,则需要确保所需版本的库位于给定的目标计算机上。 每个图书馆可能会依次与其他图书馆等链接。 最后,你必须分发一个操作系统的整个副本,比如Steam for Linux:它在内部承载了Ubuntu的大部分内容。 所以有时可能会更明智地链接到一个静态库,并包括所有需要的东西到你的应用程序。
回到实际问题。 由于您已经安装了libhdf5开发文件( libhdf5-dev )的系统软件包,我建议您使用“系统库”(p1.1)。
在这种情况下,您应该从构建树中完全删除库的所有其他副本,并在CMakeLists.txt中使用以下代码块:
find_package(HDF5 required) ... include_directories(${HDF5_INCLUDE_Dirs}) ... target_link_libraries(yourapp ${HDF5_LIBRARIES} <other required libs>)
如果您的应用程序是C ++应用程序,则可以使用${HDF5_CXX_LIBRARIES}而不是${HDF5_LIBRARIES} 。
如果您决定链接到一个静态库 ,那么在调用find_package(HDF5...) 之前 ,您需要定义一个特殊变量HDF5_USE_STATIC_LIBRARIES :
set(HDF5_USE_STATIC_LIBRARIES ON) find_package(HDF5 required) ...
如果你仍然希望使用库的自定义构建,那么你应该“解释” find_package在哪里寻找库组件。 您可以在HDF5构建树中运行make DESTDIR=/some/path install ,然后在应用程序构建树中运行cmake时,使用该/some/path作为HDF5_ROOT环境变量的值:
HDF5_ROOT=/some/path cmake .
在这种情况下,CMake将尝试在该目录中找到HDF5组件。 我会在这个操作之前(以防万一)使用apt-get remove libhdf5-dev删除sytem包apt-get remove libhdf5-dev 。
但是我也相信你应该有很好的理由不使用系统libhdf5包。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。