我开发了一个共享库形式的框架(在Linux中)。用户要求提供静态版本的库。我使用cmake,因此只是将BUILD_SHARED_LIBS切换为OFF。按照预期,我结束了一个静态库。如何生成“自包含”静态库?
但是,用户抱怨说他现在已经链接到boost和hdf5,它们是我的库的依赖关系。
您是否认为我必须采取行动来避免这种情况?或者这是正常的?有没有可能提供一个没有依赖关系的库?
编辑:我应该做一些像从提升和hdf5静态库提取对象文件,并添加它们时,建立自己的?
我开发了一个共享库形式的框架(在Linux中)。用户要求提供静态版本的库。我使用cmake,因此只是将BUILD_SHARED_LIBS切换为OFF。按照预期,我结束了一个静态库。如何生成“自包含”静态库?
但是,用户抱怨说他现在已经链接到boost和hdf5,它们是我的库的依赖关系。
您是否认为我必须采取行动来避免这种情况?或者这是正常的?有没有可能提供一个没有依赖关系的库?
编辑:我应该做一些像从提升和hdf5静态库提取对象文件,并添加它们时,建立自己的?
升压的解决方案是:
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON) # it may help
find_package(Boost REQUIRED ...)
对于HDF5你可以尝试这样的事情。
复制静态库的HDF静态库到您的构建树的目录与
EXEC_PROGRAM(${CMAKE_COMMAND} -E copy_if_different ${HDF_LIB} ${PROJECT_BINARY_DIR}/HDFStaticLib)
添加链接目录HDFStaticLib先用
LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/HDFStaticLib)
添加库这样的:
TARGET_LINK_LIBRARIES(foo ${PROJECT_BINARY_DIR}/HDFStaticLib/HDF)
一件事:你应该有改名API.a到libAPI.a,如果文件名不以lib开头。
谢谢您的回复。我尝试了升压解决方案,但没有帮助。当我的框架链接一个二进制文件时,我仍然需要指定boost库,当我的框架作为共享库分发时,情况并非如此。 我可能误解了你的建议。 – Barth
@Barth:[理论上很好。 :)](http://cmake.org/cmake/help/cmake-2-8-docs.html#module:FindBoost)'SET(Boost_USE_STATIC_RUNTIME ON)'可能有帮助。 – Naszta