gpt4 book ai didi

cmake忽略静态库链接请求

转载 作者:行者123 更新时间:2023-12-02 13:45:07 25 4
gpt4 key购买 nike

我已经搜索了几个小时来解决这个问题,但我尝试的一切都不起作用。我正在尝试与某些库(libPoco、libmysqlcpp、libmysqlclient、libssl)静态链接。

我正在使用 cmake,虽然我正在定义静态库,但 cmake 只是查找动态库。我知道我的文件系统中的静态存档中有所有必需的库,并且我知道它们在哪里。

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}
/lib
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/usr/lib/x86_64-linux-gnu)

find_library(POCO_NET NAMES libPocoNet.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library(POCO_UTIL NAMES libPocoUtil.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library(POCO_XML NAMES libPocoXML.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (MYSQL_CLIENT NAMES libmysqlclient.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (MYSQL_CPP NAMES libmysqlpp.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (LIBSSL NAMES libssl.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)

if (POCO_NET AND POCO_UTIL AND POCO_XML AND MYSQL_CLIENT AND MYSQL_CPP AND LIBSSL)
message(STATUS ${POCO_NET})
message(STATUS ${POCO_UTIL})
message(STATUS ${POCO_XML})
message(STATUS ${MYSQL_CLIENT})
message(STATUS ${MYSQL_CPP})
message(STATUS ${LIBSSL})
target_link_libraries(icarus
PocoNet
PocoUtil
PocoXML
mysqlpp
mysqlclient
ssl)
else ()
message(FATAL_ERROR "FATAL ERROR: missing library")
endif (POCO_NET AND POCO_UTIL AND POCO_XML AND MYSQL_CLIENT AND MYSQL_CPP AND LIBSSL)

但是当我运行cmake ..时,我得到的是:

-- /usr/local/lib/libPocoNet.so
-- /usr/local/lib/libPocoUtil.so
-- /usr/local/lib/libPocoXML.so
-- /usr/lib/x86_64-linux-gnu/libmysqlclient.so
-- /usr/lib/libmysqlpp.so
-- /usr/lib/libssl.so

当我尝试编译时,我得到了 undefined reference ,因为我使用的是 -static 标志。我在这里缺少什么?有没有办法强制 cmake 查找静态库而不是动态库?我在这件事上走错路了吗?谢谢。

最佳答案

看起来您对 add_library 之间有点困惑和 find_library命令。 find_library 不接受 STATICIMPORTED 参数。

此外,您还没有将 CMAKE_LIBRARY_PATH 包装在 find_library 调用中的 ${} 中,因此您实际上传递了 3 个路径“CMAKE_LIBRARY_PATH”、“STATIC”和“IMPORTED”到 CMake 的搜索例程,而不是 ${CMAKE_LIBRARY_PATH} 的预期 6 个路径。

最后,由于 ${CMAKE_LIBRARY_PATH} 已经是 CMake 搜索例程中的第一个调用端口,因此无需将其显式添加到 find_library 命令中。

所以你可以这样做:

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}
/lib
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/usr/lib/x86_64-linux-gnu)

find_library(POCO_NET NAMES libPocoNet.a)
find_library(POCO_UTIL NAMES libPocoUtil.a)
find_library(POCO_XML NAMES libPocoXML.a)
find_library(MYSQL_CLIENT NAMES libmysqlclient.a)
find_library(MYSQL_CPP NAMES libmysqlpp.a)
find_library(LIBSSL NAMES libssl.a PATHS)

if(POCO_NET AND POCO_UTIL AND POCO_XML AND MYSQL_CLIENT AND MYSQL_CPP AND LIBSSL)
message(STATUS ${POCO_NET})
message(STATUS ${POCO_UTIL})
message(STATUS ${POCO_XML})
message(STATUS ${MYSQL_CLIENT})
message(STATUS ${MYSQL_CPP})
message(STATUS ${LIBSSL})
target_link_libraries(icarus
${POCO_NET}
${POCO_UTIL}
${POCO_XML}
${MYSQL_CLIENT}
${MYSQL_CPP}
${LIBSSL})
else()
message(FATAL_ERROR "FATAL ERROR: missing library")
endif()

关于cmake忽略静态库链接请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com