我正试图在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的模块,以便于加载。我的程序是这里给出的基本测试程序,普鲁加。它适用于我,但当我试图包括一个第三方图书馆,我是卡住了。
如果有人能指出解释如何在插件中使用第三方库的资源,那就太棒了!
发布于 2017-10-17 11:54:15
解决了!
我将其添加到cmake文件set(CMAKE_POSITION_INDEPENDENT_CODE ON)中,这是错误消息试图告诉我的(用-fPIC编译)。
我这样做了,现在我可以链接我的插件与静态库。
https://stackoverflow.com/questions/46788239
复制相似问题