2011-07-05 70 views
1

我开发了一个共享库形式的框架(在Linux中)。用户要求提供静态版本的库。我使用cmake,因此只是将BUILD_SHARED_LIBS切换为OFF。按照预期,我结束了一个静态库。如何生成“自包含”静态库?

但是,用户抱怨说他现在已经链接到boost和hdf5,它们是我的库的依赖关系。

您是否认为我必须采取行动来避免这种情况?或者这是正常的?有没有可能提供一个没有依赖关系的库?

编辑:我应该做一些像从提升和hdf5静态库提取对象文件,并添加它们时,建立自己的?

回答

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静态库到您的构建树的目录与

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

  3. 添加链接目录HDFStaticLib先用

    LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/HDFStaticLib)

  4. 添加库这样的:

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

一件事:你应该有改名API.a到libAPI.a,如果文件名不以lib开头。

+0

谢谢您的回复。我尝试了升压解决方案,但没有帮助。当我的框架链接一个二进制文件时,我仍然需要指定boost库,当我的框架作为共享库分发时,情况并非如此。 我可能误解了你的建议。 – Barth

+0

@Barth:[理论上很好。 :)](http://cmake.org/cmake/help/cmake-2-8-docs.html#module:FindBoost)'SET(Boost_USE_STATIC_RUNTIME ON)'可能有帮助。 – Naszta

相关问题