首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译另一个库时发生HDF5错误

编译另一个库时发生HDF5错误
EN

Stack Overflow用户
提问于 2016-10-13 21:39:25
回答 1查看 814关注 0票数 1

我按照以下步骤编译了HDF5:

代码语言:javascript
复制
untar hdf5-xxx.tar.gz
cd hdf5-xxx
make
make install

但是,在安装另一个请求OpenGM的库( HDF5 )时,我提供了以下参数:

代码语言:javascript
复制
HDF5_CORE_LIBRARY                /Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5                                                             
 HDF5_CPP_LIBRARY                 /Users/Florian/Documents/THESE/hdf5-1.8.7/c++                                                              
 HDF5_HL_LIBRARY                  /Users/Florian/Documents/THESE/hdf5-1.8.7/hl                                                               
 HDF5_INCLUDE_DIR                 /Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5/include                                                     
 HDF5_Z_LIBRARY                   /usr/lib/libz.dylib

在使用CMake和generate之后,我得到:

代码语言:javascript
复制
 WARNING: Target "example-io" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5".  Targets may link only to libraries.
  CMake is dropping the item.

 WARNING: Target "example-io" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hl".  Targets may link only to libraries.
 CMake is dropping the item.

 WARNING: Target "external-library-daoopt" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5".  Targets may link only
 to libraries.  CMake is dropping the item.

 WARNING: Target "external-library-daoopt" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hl".  Targets may link only to
 libraries.  CMake is dropping the item.

 WARNING: Target "external-library-daoopt-shared" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5".  Targets may
 link only to libraries.  CMake is dropping the item.

 WARNING: Target "external-library-daoopt-shared" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hl".  Targets may link
 only to libraries.  CMake is dropping the item.

 WARNING: Target "_opengmcore" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5".  Targets may link only to
 libraries.  CMake is dropping the item.

 WARNING: Target "_opengmcore" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5".  Targets may link only to
 libraries.  CMake is dropping the item.

 WARNING: Target "_opengmcore" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hl".  Targets may link only to libraries.
 CMake is dropping the item.

 WARNING: Target "_hdf5" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5".  Targets may link only to libraries.
 CMake is dropping the item.

 WARNING: Target "_hdf5" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hl".  Targets may link only to libraries.  CMake
 is dropping the item.

 WARNING: Target "modelIO" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5".  Targets may link only to libraries.
 CMake is dropping the item.

 WARNING: Target "modelIO" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hl".  Targets may link only to libraries.
 CMake is dropping the item.

 WARNING: Target "buildFoE" requests linking to directory "/Users/Florian/Documents/THESE/hdf5-1.8.7/hdf5".  Targets may link only to libraries.
 CMake is dropping the item.

因为这些只是警告,所以我可以编译我的OpenGM库:

代码语言:javascript
复制
make

但是,我的结果是出现了以下错误:

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
  "_H5Aclose", referenced from:
      void marray::hdf5::save<unsigned long>(int const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, marray::Marray<unsigned long, std::__1::allocator<unsigned long> > const&) in io_graphical_model.cxx.o
      void marray::hdf5::save<float>(int const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, marray::Marray<float, std::__1::allocator<unsigned long> > const&) in io_graphical_model.cxx.o
      void marray::hdf5::save<double>(int const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, marray::Marray<double, std::__1::allocator<unsigned long> > const&) in io_graphical_model.cxx.o
      void marray::hdf5::save<long>(int const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, marray::Marray<long, std::__1::allocator<unsigned long> > const&) in io_graphical_model.cxx.o
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

由于警告和错误处理都与HDF5有关,我认为主要问题来自于这个库。

如果可以的话,我正在使用MacOSX。

**编辑:**添加FindHDF5.cmake文件

代码语言:javascript
复制
# - Find HDF5, a library for reading and writing self describing array data.
#
FIND_PATH(HDF5_INCLUDE_DIR hdf5.h)

FIND_LIBRARY(HDF5_CORE_LIBRARY NAMES hdf5dll hdf5  )
FIND_LIBRARY(HDF5_HL_LIBRARY NAMES hdf5_hldll hdf5_hl  )
FIND_LIBRARY(HDF5_CPP_LIBRARY NAMES hdf5_cppdll hdf5_cpp )

IF(WIN32 AND HDF5_CORE_LIBRARY MATCHES "dll.lib$")
    SET(HDF5_CFLAGS "-D_HDF5USEDLL_")
    SET(HDF5_CPPFLAGS "-D_HDF5USEDLL_ -DHDF5CPP_USEDLL")
ELSE()
    SET(HDF5_CFLAGS)
    SET(HDF5_CPPFLAGS)
ENDIF()

SET(HDF5_VERSION_MAJOR 1)
SET(HDF5_VERSION_MINOR 8)

set(HDF5_SUFFICIENT_VERSION FALSE)

TRY_COMPILE(HDF5_SUFFICIENT_VERSION
            ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}/checkHDF5version.c
            COMPILE_DEFINITIONS "-I\"${HDF5_INCLUDE_DIR}\" -DMIN_MAJOR=${HDF5_VERSION_MAJOR} -DMIN_MINOR=${HDF5_VERSION_MINOR}")

if(HDF5_SUFFICIENT_VERSION)
    MESSAGE(STATUS
           "Checking HDF5 version (at least ${HDF5_VERSION_MAJOR}.${HDF5_VERSION_MINOR}): ok")
else()
    MESSAGE( STATUS "HDF5: need at least version ${HDF5_VERSION_MAJOR}.${HDF5_VERSION_MINOR}" )
endif()

set(HDF5_USES_ZLIB FALSE)
TRY_COMPILE(HDF5_USES_ZLIB
           ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}/checkHDF5usesCompression.c
           COMPILE_DEFINITIONS "-I\"${HDF5_INCLUDE_DIR}\" -DH5_SOMETHING=H5_HAVE_FILTER_DEFLATE")

if(HDF5_USES_ZLIB)
    FIND_LIBRARY(HDF5_Z_LIBRARY NAMES zlib1 zlib z )
    set(HDF5_ZLIB_OK ${HDF5_Z_LIBRARY})
else()
    set(HDF5_ZLIB_OK TRUE)
    set(HDF5_Z_LIBRARY "")
endif()

set(HDF5_USES_SZLIB FALSE)
TRY_COMPILE(HDF5_USES_SZLIB 
            ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}/checkHDF5usesCompression.c
            COMPILE_DEFINITIONS "-I\"${HDF5_INCLUDE_DIR}\" -DH5_SOMETHING=H5_HAVE_FILTER_SZIP")

if(HDF5_USES_SZLIB)
    FIND_LIBRARY(HDF5_SZ_LIBRARY NAMES szlibdll sz )
    set(HDF5_SZLIB_OK ${HDF5_SZ_LIBRARY})
else()
    set(HDF5_SZLIB_OK TRUE)
    set(HDF5_SZ_LIBRARY "")
endif()

# handle the QUIETLY and REQUIRED arguments and set HDF5_FOUND to TRUE if 
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(HDF5 DEFAULT_MSG HDF5_CORE_LIBRARY 
        HDF5_HL_LIBRARY HDF5_ZLIB_OK HDF5_SZLIB_OK HDF5_INCLUDE_DIR)

IF(HDF5_FOUND)
    SET(HDF5_LIBRARIES ${HDF5_CORE_LIBRARY} ${HDF5_HL_LIBRARY} ${HDF5_Z_LIBRARY} ${HDF5_SZ_LIBRARY})
ELSE()
    SET(HDF5_CORE_LIBRARY HDF5_CORE_LIBRARY-NOTFOUND)
    SET(HDF5_HL_LIBRARY   HDF5_HL_LIBRARY-NOTFOUND)
    SET(HDF5_Z_LIBRARY    HDF5_Z_LIBRARY-NOTFOUND)
    SET(HDF5_SZ_LIBRARY   HDF5_SZ_LIBRARY-NOTFOUND)
ENDIF(HDF5_FOUND)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-16 14:29:40

通过编译带有HDF5标志的--with_cxx库来构建C++接口,解决了这个问题。此外,我在HDF5中安装了/usr/local库,以便在安装opengm时自动找到它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40031452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档