我以共享库的形式开发了一个框架(在Linux中)。用户要求提供该库的静态版本。我使用cmake,因此只是将BUILD_SHARED_LIBS切换为OFF。我最终得到了一个静态库。
然而,用户抱怨他现在要链接vs我和我的库依赖的boost和hdf5。
你认为我必须采取行动以避免这种情况吗?还是正常的?是否有可能提供没有依赖关系的库?
编辑:我应该做一些事情,比如从boost和hdf5静态库中提取目标文件,并在构建自己的库时添加它们吗?
答案 0 :(得分:3)
提升'解决方案是:
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON) # it may help
find_package(Boost REQUIRED ...)
对于hdf5,您可以尝试这样的事情。
使用
将静态库复制到构建树中的目录中 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)
还有一件事:如果文件名不是以lib开头的话,你应该将API.a重命名为libAPI.a。