我使用CMake
生成一个makefile来编译一个使用boost,eigen和mysqlclient库的C ++项目。
在make过程中,代码似乎在编译,但是在链接阶段我得到了错误
ld: library not found for -lmysqlclient
我有一行target_link_libraries(my_executable mysqlclient)
在我的CMakeLists.txt
文件中。当我删除该行时,我不再收到该错误消息,但随后我得到了一长串未定义符号错误(所有这些都与mysql有关)。
该项目在Xcode中正确构建,所以我知道至少在我的机器上设置了mysql客户端库。
有什么提示,建议吗?
答案 0 :(得分:1)
您需要使用Kitware中的FindMySQL.make
包(将文件保存在此处:https://cmake.org/Wiki/CMakeUserFindMySQL为${CMAKE_SOURCE_DIR}/cmake/FindMySQL.cmake
),然后找到该库:
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
find_package(MySQL)
最后,cmake中的链接步骤应替换为
target_link_library(myexecutable ${MYSQL_LIBRARY})
${MYSQL_LIBRARY}
应包含要与
答案 1 :(得分:0)
如果只想包含/链接到mysqlclient C API而不创建cmake文件,则可以使用cmake中的pkg_check_modules:
find_package(PkgConfig)
pkg_check_modules(MySQL REQUIRED mysqlclient>=5.7)
和相关的变种
target_include_directories(${PROJECT_NAME} PUBLIC ${MySQL_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PUBLIC ${MySQL_LIBRARIES})