在Windows中将APR(Apache Portable Runtime)与CMake链接

时间:2013-03-28 13:24:12

标签: windows cmake lnk2019 apr

我想使用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,因为它不需要任何参数。 我仍然想知道视觉工作室正在使用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)。

For linux i am using following FindAPR.cmake module (the FindAPR_unix.cmake file)

它搜索apr-1-config并执行shell脚本。

在linux中,我的APR_LIBRARIES变量如下所示:

-L/usr/lib;-lapr-1

Windows直接使用该库及其路径:

{path_to_lib}/libapr-1.lib

CMake没有宣布任何链接错误,如上所述Visual Studio在调用任何apr函数时确实给出了LNK2019错误。

也许某人确实有这个问题的提示?

0 个答案:

没有答案