我想使用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错误。
也许某人确实有这个问题的提示?