问题描述
我已经使用GCC编译器(在Linux上)从源代码将libevent库构建为静态库。 Cmake选项:
cmake -B build -S . -DEVENT__disABLE_OPENSSL=ON -DEVENT__LIBRARY_TYPE=STATIC -DEVENT__disABLE_DEBUG_MODE=ON
cmake --build build --config Release
CMakeLists.txt中的链接库:
target_link_libraries(${PROJECT_NAME}
${CMAKE_SOURCE_DIR}/libevent_core.a
)
但是我仍然收到这样的错误:
/usr/bin/ld: /home/user/libevent_test/main.cpp:65: undefined reference to `event_base_new'
/usr/bin/ld: /home/user/libevent_test/main.cpp:85: undefined reference to `event_new'
/usr/bin/ld: /home/user/libevent_test/main.cpp:89: undefined reference to `event_add'
我还尝试将libevent构建为共享库(.so输出文件),并且链接良好。
在CMakeLists.txt中,我刚刚将${CMAKE_SOURCE_DIR}/libevent_core.a
更改为${CMAKE_SOURCE_DIR}/libevent_core.so
。
而且我的程序编译好了。为什么静态库不链接?
我做错了什么?
预先感谢!
解决方法
已解决。我将target_link_libraries
用于可执行文件,但libevent用于链接到可执行文件的静态库。
现在,我将libevent直接链接到正在使用它的静态库。而且有效。