如何制作一个“自包含”的静态库?

时间:2011-07-05 06:44:25

标签: dependencies cmake static-libraries

我以共享库的形式开发了一个框架(在Linux中)。用户要求提供该库的静态版本。我使用cmake,因此只是将BUILD_SHARED_LIBS切换为OFF。我最终得到了一个静态库。

然而,用户抱怨他现在要链接vs我和我的库依赖的boost和hdf5。

你认为我必须采取行动以避免这种情况吗?还是正常的?是否有可能提供没有依赖关系的库?

编辑:我应该做一些事情,比如从boost和hdf5静态库中提取目标文件,并在构建自己的库时添加它们吗?

1 个答案:

答案 0 :(得分:3)

提升'解决方案是:

set(Boost_USE_STATIC_LIBS   ON)
set(Boost_USE_STATIC_RUNTIME ON) # it may help
find_package(Boost REQUIRED ...)

对于hdf5,您可以尝试这样的事情。

  1. 使用FIND_LIBRARY
  2. 查找HDF静态库
  3. 使用

    将静态库复制到构建树中的目录中

    EXEC_PROGRAM( ${CMAKE_COMMAND} -E copy_if_different ${HDF_LIB} ${PROJECT_BINARY_DIR}/HDFStaticLib)

  4. 首先使用

    添加HDFStaticLib的链接目录

    LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/HDFStaticLib)

  5. 像这样添加库:

    TARGET_LINK_LIBRARIES(foo ${PROJECT_BINARY_DIR}/HDFStaticLib/HDF)

  6. 还有一件事:如果文件名不是以lib开头的话,你应该将API.a重命名为libAPI.a。