所以我正在用两个静态库构建一个共享库.
这个答案说这样做的方法是-Wl,--whole-archive在我的静态库之前插入,然后插入-Wl,--no-whole-archive它们.
那么我目前在cmake中为共享库提供的是:
add_library(wittyPlus SHARED empty.cpp)
target_link_libraries(wittyPlus
${wtdbosqlite}
${WT_LIBRARIES}
${DB_LIBRARIES}
${Boost_LIBRARIES}
app models
)
Run Code Online (Sandbox Code Playgroud)
所以,我需要的是为它加上-Wl,--whole-archive之前app和models,然后-Wl,--no-whole-archive在他们之后(以标准库进口不要被共享库导出).
在CMake中最简单的方法是什么?
另外:所以我想尽可能多地使用标准的cmake东西,这样我就不需要为Windows构建做任何额外的工作,因为CMake会删除平台上不支持的编译器定义.建成.
mat*_*tiu 17
好吧,这比我想象的容易得多.
所以根据cmake文档:
以" - "开头但不是"-l"或"-framework"的项目名称被视为链接器标志.
所以修复只是为了:
add_library(wittyPlus SHARED empty.cpp)
target_link_libraries(wittyPlus
${wtdbosqlite}
${WT_LIBRARIES}
${DB_LIBRARIES}
${Boost_LIBRARIES}
"-Wl,--whole-archive"
app models
"-Wl,--no-whole-archive"
)
Run Code Online (Sandbox Code Playgroud)
我不知道它是否可以在Windows上工作,我希望它会像cmake一样超级聪明.
用objdump查看结果,它似乎在导出中有很多提升的东西,所以我可能做错了.
objdump -C -t wittyPlus/libwittyPlus.so | grep -i boost
Run Code Online (Sandbox Code Playgroud)
但它确实有我需要链接的东西,所以,这是向前迈出的一步.
任何其他答案仍然赞赏.基本上我要做的就是和这个问题一样:
| 归档时间: |
|
| 查看次数: |
11514 次 |
| 最近记录: |