2

我想使用 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 错误。

也许有人对这个问题有提示?

4

0 回答 0