访问可执行文件的全局变量时共享库链接器错误

时间:2016-08-15 17:32:48

标签: c++ cmake shared-libraries

我的C ++应用程序使用dlopen和朋友来实现一个插件系统,根据需要加载共享库。

部分应用程序是预处理器宏

#define LOG_STREAM (lock_guard<mutex>(CERR_MUTEX), cerr)

我用来保护cerr <<表达式。 CERR_MUTEX是一个全局std::mutex变量,在.cpp中定义,标头中有相应的extern声明。在整个可执行文件中使用LOG_STREAM没有问题。

插件也使用LOG_STREAM作为日志消息。不幸的是,插件编译因链接器错误而失败

Undefined symbols for architecture x86_64: "_CERR_MUTEX"

我使用cmake进行插件编译。 CMakeLists中的相关行是

file(GLOB WORKLOAD_SOURCES "workloads/*.cpp")
foreach(SRC ${WORKLOAD_SOURCES})
    get_filename_component(WORKLOAD_NAME ${SRC} NAME_WE)

    add_library(${WORKLOAD_NAME} MODULE ${SRC})
    set_target_properties(${WORKLOAD_NAME} PROPERTIES ${TARGETPROPS})
    target_link_libraries(${WORKLOAD_NAME} ${TBB_LIBRARIES} ${Boost_LIBRARIES})
endforeach(SRC)

我还尝试用类的静态成员替换普通的全局变量。同样的错误。

任何想法是什么原因以及如何解决它将非常感激。

0 个答案:

没有答案