【问题标题】:Running mysql-connector with CMake and C++?使用 CMake 和 C++ 运行 mysql-connector?
【发布时间】:2017-01-11 16:19:30
【问题描述】:

我似乎找不到我的 CMake 问题的解决方案。

我想使用 mysql-connector-c++ 和 CURL,在我的 /Desktop/example 目录中我制作了以下 CMakeLists.txt:

cmake_minimum_required (VERSION 3.1.0)
PROJECT (main)
ADD_EXECUTABLE (main main.cpp)
target_link_libraries(main curl mysql-connector-c++)
target_compile_features(main PRIVATE cxx_range_for)

我在 main.cpp 中包含了以下标头:

#include <curl/curl.h>

#include <mysql_connection.h>
#include <driver.h> 
#include <exception.h>
#include <resultset.h>
#include <statement.h>

我已经下载了 mysql-connector-c++ 的 zip file,解压缩并将其放在我的当前目录中。

然后我运行 cmake .make 并生成以下错误:

fatal error: 
  'mysql_connection.h' file not found

这很奇怪,因为当我删除 mysql-connector 标头时,CURL 工作正常。

关于为什么这不起作用的任何想法?

注意 以下命令运行并显示所述结果:

g++ -std=c++14 -lcurl main.cpp  //Success
g++ -std=c++14 -lcurl -lmysqlcppconn main.cpp //Fatal eror: 'mysql_connection.h' file not found

【问题讨论】:

  • 你把解压后的存档放在Desktop/example里面了吗?
  • @fedepad 应该不是解压后的mysql-connector-c++
  • 不用了,我正在写一个你可以试试的答案...

标签: c++ macos cmake mysql-connector


【解决方案1】:

我相信 CMake 不知道包含头文件和库作为“包含”或“库”目录的目录。您可以尝试的一种解决方案是在调用之前指定包含和链接目录

ADD_EXECUTABLE (main main.cpp)  

所以您的 CMakeLists.txt 应该如下所示:

cmake_minimum_required (VERSION 3.1.0)
project(main)
set(FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR your_path_to_mysql_connectorcpp)
include_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include)
include_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include/cppconn)
link_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/lib)
add_executable(main main.cpp)
target_link_libraries(main curl mysqlcppconn)
target_compile_features(main PRIVATE cxx_range_for)  

几点说明:

1) 如果你想在源代码中调用driver.h,那么你应该使用 CMakeLists.txt above;

2) 如果你想在源代码中调用cppconn/driver.h,那么你应该使用 CMakeLists.txt 下面

cmake_minimum_required (VERSION 3.1.0)
project(main)
set(FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR your_path_to_mysql_connectorcpp)
include_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include)
link_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/lib)
add_executable(main main.cpp)
target_link_libraries(main curl mysqlcppconn)
target_compile_features(main PRIVATE cxx_range_for)  

随着您的 CMake 将变得更加复杂,您还可以基于每个目标定义包含目录和库,但以上内容对于您现在拥有的东西应该没问题。

【讨论】:

  • 现在声明ld: library not found for -lmysql-connector-c++
  • 你确定图书馆的名字是对的吗?因为我已经下载它并且名称似乎是libmysqlcppconn.dylib,所以将mysqlcppconn 放在target_link_libraries() 中。我更新了答案。
  • 我很高兴!编码愉快!
  • 检查答案,应该给出两个选项。
  • 我想我已经完成了答案,第二个片段中的一行没有出现......
【解决方案2】:

首先在你的mac上安装mysql库

brew install mysql-connector-c++

然后使用上面的cmake文本

cmake_minimum_required(VERSION 3.17)
project(connectToMysql)
set(CMAKE_CXX_STANDARD 14)
add_executable(connectToMysql main.cpp)
include_directories(/usr/local/Cellar/mysql-connector-c++/8.0.25/include)
target_link_libraries(connectToMysql -L/usr/local/Cellar/mysql-connector-c++/8.0.25/lib/)
 target_link_libraries(connectToMysql libmysqlcppconn8.2.8.0.25.dylib)

请记住,如果您想将库链接到 cmake 您必须指定该 .dylib 文件的名称

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多