我想使用 apache 可移植运行时库 (APR) 和 cmake 编译一个项目。与 linux 一起运行时看起来一切都很好(因为我可以使用 apr-1-config shell 脚本)。然而,在 Windows 中,它看起来cmake
没有正确绑定或链接包含的文件。我尝试了一些不同的方法,比如导入libapr-1.lib
静态库或target_link_library
所有东西,但似乎没有任何效果。我总是得到
error LNK2019: unresolved external symbol
使用 Visual Studio 编译时出现链接器错误。我正在调用哪个函数并不重要,例如我正在调用的函数apt_pool_create
,因为它不需要任何参数。我仍然想知道,因为 Visual Studio 正在使用 IntelliSense 查找文件并向我展示所有内联文档。apt_pool*
此外,当指针对象被定义并使用 NULL 初始化时,编译器也不会构建失败。
也许有人确实知道为什么会出现这些链接器问题。以下是CMakeLists.txt
文件中的一些片段:
CMakeLists.txt(部分)
# Include unimrcp requirements (apr package)
IF(WIN32) # Search APR in windows
INCLUDE(${PROJECT_SOURCE_DIR}/cmake_modules/FindAPR_windows.cmake)
ELSE(WIN32) # Search APR in unix
INCLUDE(${PROJECT_SOURCE_DIR}/cmake_modules/FindAPR_unix.cmake)
ENDIF(WIN32)
# Set link libraries
SET(TARGET_LINK_LIBS
${APR_LIBRARIES}
${APRUTIL_LIBRARIES}
${PTHREADS}
)
SET(CLIENT_SOURCES ...)
SET(CLIENT_HEADERS ...)
# Include intermediary files
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_BINARY_DIR}
${APR_INCLUDE_DIR}
${APRUTIL_INCLUDE_DIR}
)
# Add executable and link libraries
ADD_EXECUTABLE(${CLIENT_TARGET} src/main.cpp ${CLIENT_SOURCES} ${CLIENT_HEADERS})
TARGET_LINK_LIBRARIES(${CLIENT_TARGET} ${TARGET_LINK_LIBS})
这CLIENT_TARGET
只是输出的预定义目标名称。
[对于 Windows,我正在使用以下 FindAPR.cmake 模块(FindAPR_windows.cmake 文件)]( https://svn.apache.org/repos/asf/incubator/celix/trunk/cmake/modules/FindAPR.cmake)。
对于 linux,我正在使用以下 FindAPR.cmake 模块(FindAPR_unix.cmake 文件)。
它搜索apr-1-config
并执行 shell 脚本。
在 linux 中,我的 APR_LIBRARIES 变量如下所示:
-L/usr/lib;-lapr-1
Windows 直接使用该库及其路径:
{path_to_lib}/libapr-1.lib
CMake 没有公布任何链接错误,如上所述,Visual Studio 在调用任何 apr 函数时确实给了我 LNK2019 错误。
也许有人对这个问题有提示?