我正在尝试用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给出的基本测试程序。它适用于我,但当我尝试包含第三方库时,我被卡住了。
如果有人能指出解释如何在插件中使用第三方库的资源,那就太棒了!
答案 0 :(得分:1)
<强>解决!强>
我将此添加到我的cmake文件set(CMAKE_POSITION_INDEPENDENT_CODE ON)
,这是错误消息试图告诉我的内容(使用-fPIC
编译)。
我这样做了,现在我可以将我的插件链接到静态库。