【问题标题】:Creating a shared library with existing static library使用现有静态库创建共享库
【发布时间】:2021-03-18 09:48:47
【问题描述】:

我想创建一个安装了“sqlite3(SHARED)”和“glog(STATIC)”的共享库。

add_library(sqlite3 SHARED IMPORTED)
add_library(glog STATIC IMPORTED)
set_target_properties(sqlite3 PROPERTIES IMPORTED_LOCATION /usr/local/lib/libsqlite3.so)
set_target_properties(glog PROPERTIES IMPORTED_LOCATION /usr/local/lib/libglog.a)

add_library(${MY_LIBRARY} SHARED ${MY_SOURCE})
target_link_libraries(${MY_LIBRARY} sqlite3 glog)

这会导致以下错误

/usr/local/lib/libglog.a: can not be used when making a shared object; recompile with -fPIC

CMakeLists.txt 有什么问题?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    您的问题不在于 CMake(尽管您应该永远有硬编码路径...使用 find_package 或 find_library),而是您正在尝试做一些不可能的事情。正如你的编译器告诉你的那样,

    /usr/local/lib/libglog.a: can not be used when making a shared object; recompile with -fPIC
    

    libglog.a 没有使用与位置无关的代码编译,因此它不能在共享库中使用。这里有更多关于 SO 的信息:How to recompile with -fPIC

    您需要用-fPIC 重新编译libglog.a。

    【讨论】:

    • @makepossible99 如果可行,请接受答案(Alex 获得 +15,你获得 +2)
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多