C ++将静态库链接到共享库

时间:2017-10-17 10:43:36

标签: c++ gcc cmake linker shared-libraries

我正在尝试用C ++构建一个基于插件的应用程序。

我有两个目标 - 基础和插件。

这是我执行主要工作的CMakeLists.txt的一部分

# Executables
# build plugin
file (GLOB SRCP "plugin/*.?pp")
include_directories(plugin/)
MESSAGE ( STATUS "SRC: " "${SRCP}" )
add_library(testplugin MODULE ${SRCP} )
add_dependencies( testplugin ${DEPS_TARGETS})
#target_link_libraries( testplugin dlib::dlib )
#build main
file( GLOB SRC "*.?pp" )
message( STATUS "SRC: " "${SRC}" )
add_executable( exec ${SRC} )
add_dependencies( exec ${DEPS_TARGETS})
target_link_libraries( exec dlib::dlib )

它构建成功,但是当我尝试加载插件时,它会因此错误而失败

  

错误:无法加载库:libtestplugin.so:未定义符号:_ZN4dlib6loggerD1Ev

该符号对应于插件dlib::logger dlog("main.abstract_cnn");

中的语句

dlib是一个静态库,我在基础和插件中都使用它。  我将此库链接到基本应用程序,但我不知道如何链接它到库/模块?基础应用程序不会将符号传递给插件吗?在这种情况下我该怎么办?

我还想要一个跨平台的解决方案。主要是linux + windows。

任何人都可以提供建议吗?请?

我如何加载 我正在使用一个名为Libsourcey的库,它有一个名为pluga的模块,可以轻松加载。我的程序是pluga给出的基本测试程序。它适用于我,但当我尝试包含第三方库时,我被卡住了。

如果有人能指出解释如何在插件中使用第三方库的资源,那就太棒了!

1 个答案:

答案 0 :(得分:1)

<强>解决!

我将此添加到我的cmake文件set(CMAKE_POSITION_INDEPENDENT_CODE ON),这是错误消息试图告诉我的内容(使用-fPIC编译)。
我这样做了,现在我可以将我的插件链接到静态库。