我正在嘗試在C++中構建一個基於插件的應用程序。C++將靜態庫鏈接到共享庫
我有兩個目標 - 基礎和插件。
這是做的主要工作
# 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)
它成功地建立,但是當我嘗試加載的插件,它失敗,此錯誤
Error: Cannot load library: libtestplugin.so: undefined symbol: _ZN4dlib6loggerD1Ev
我的CMakeLists.txt的一部分中符號對應於插件中的語句dlib::logger dlog("main.abstract_cnn");
dlib是一個靜態庫,我在基礎和插件中都使用它。 我把這個庫鏈接到基礎應用程序,但我不知道如何鏈接它到一個庫/模塊?基礎應用程序不會將符號傳遞給插件嗎?在這種情況下我能做些什麼?
我還想要一個跨平臺的解決方案。主要是linux + windows。
任何人都可以建議嗎?請?
我如何加載 我正在使用名爲Libsourcey的庫,該庫有一個名爲pluga的模塊,用於輕鬆加載。我的程序是這裏給出的基本測試程序pluga。它適用於我,但是當我試圖包含第三方庫時,我被卡住了。
如果任何人都可以指出解釋如何在插件中使用第三方庫的資源,那就太棒了!
就像鏈接可執行程序一樣鏈接共享庫。你爲共享庫註釋掉了'target_link_libraries',如果你真的讓CMake運行它,會發生什麼? –
我試過了,但是我得到這個錯誤'/ usr/bin/ld:deps_build/dlib_build/libdlib.a(logger_kernel_1.cpp.o):在創建共享對象時,無法使用'.bss'重定位R_X86_64_32;使用-fPIC重新編譯 – azmath
好的,這是一個問題。那麼你需要告訴我們你如何*加載*「插件」?請創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們展示。 –