Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MacOS Catalina上编译/链接mysql-connector-c++与CMake 介绍 我决定用MySQL作为一个项目的一部分来自学C++,所以让我提前为缺乏知识道歉。链接、动态和静态库的概念对我来说仍然很新。把这件事解决了,我们继续吧 我试图从C++中查询MySQL服务器。理想情况下,我希望最终产品能够运行在对库依赖性尽可能小的任何体系结构上。我不希望代码的用户必须自己安装任何库,例如Connector/C++。我还想使用cmake来编译我的项目 准备_C++_Mysql_Cmake_Mysql Connector - Fatal编程技术网

在MacOS Catalina上编译/链接mysql-connector-c++与CMake 介绍 我决定用MySQL作为一个项目的一部分来自学C++,所以让我提前为缺乏知识道歉。链接、动态和静态库的概念对我来说仍然很新。把这件事解决了,我们继续吧 我试图从C++中查询MySQL服务器。理想情况下,我希望最终产品能够运行在对库依赖性尽可能小的任何体系结构上。我不希望代码的用户必须自己安装任何库,例如Connector/C++。我还想使用cmake来编译我的项目 准备

在MacOS Catalina上编译/链接mysql-connector-c++与CMake 介绍 我决定用MySQL作为一个项目的一部分来自学C++,所以让我提前为缺乏知识道歉。链接、动态和静态库的概念对我来说仍然很新。把这件事解决了,我们继续吧 我试图从C++中查询MySQL服务器。理想情况下,我希望最终产品能够运行在对库依赖性尽可能小的任何体系结构上。我不希望代码的用户必须自己安装任何库,例如Connector/C++。我还想使用cmake来编译我的项目 准备,c++,mysql,cmake,mysql-connector,C++,Mysql,Cmake,Mysql Connector,为了做到这一点,我使用二进制文件 mysql-connector-c++-8.0.19-macos10.15-x86-64位 mysql-8.0.19-macos10.15-x86_64不确定这是否必要,但mysql文档表示,使用JDBC连接到服务器需要mysql客户端,而mysqlserver附带了mysql客户端 我从源代码构建了Boost,并使用brew安装openssl,尽管ssl和加密动态库附带了连接器二进制文件 CmakeLists.txt 我使用和作为我的CmakeLists.tx

为了做到这一点,我使用二进制文件

mysql-connector-c++-8.0.19-macos10.15-x86-64位 mysql-8.0.19-macos10.15-x86_64不确定这是否必要,但mysql文档表示,使用JDBC连接到服务器需要mysql客户端,而mysqlserver附带了mysql客户端 我从源代码构建了Boost,并使用brew安装openssl,尽管ssl和加密动态库附带了连接器二进制文件

CmakeLists.txt 我使用和作为我的CmakeLists.txt的参考

cmake_minimum_required(VERSION 3.1)
project(SQL VERSION 0.1.0)

# enable c++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(MYSQL_DIR "/usr/local/mysql-connector-c++-8.0.19")

find_package(Threads REQUIRED)
find_package(Boost REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_include_directories(
    ${PROJECT_NAME}
    PUBLIC
    ${MYSQL_DIR}/include
    ${Boost_INCLUDE_DIRS}
)
find_library(SSL_LIB NAMES ssl PATHS ${MYSQL_DIR}/lib64 NO_DEFAULT_PATH)
find_library(CRYPTO_LIB NAMES crypto PATHS ${MYSQL_DIR}/lib64 NO_DEFAULT_PATH)
find_library(MYSQL_LIBS NAMES mysqlcppconn PATHS ${MYSQL_DIR}/lib64)
target_link_libraries(${PROJECT_NAME} ${MYSQL_LIBS} ${SSL_LIB} ${CRYPTO_LIB} Threads::Threads)
C++代码 定义静态_CONCPP 包括 包括 包括 包括 int main{ 标准::cout setSchemaEXAMPLE_DB; stmt=con->createStatement; sql::ResultSet*res=stmt->executeQuerySELECT*从TICKERS;
std::cout至于_res_9_dn_expand和相关错误,您还需要链接到resolv库。将-lresolv添加到链接器命令行。在阅读本文其余部分之前,请尝试一下

正如您正确指出的,如果您希望构建应用程序,以便不需要额外的文件,那么您必须链接到MySQL的静态库,以及MySQL所需的所有静态库。要正确链接,您需要使用与构建MySQL库相同的OpenSSL库

有两条路要走,要么获得MySQL用于构建现成库的相同版本的OpenSSL静态库,要么使用现有的OpenSSL版本重新编译MySQL库


<> P>只是为了增加混淆,上次我做的MySQL C++连接器依赖于MySQL运行时的C库。我相信这就是OpenSSL的输入所在。所以如果你重新编译所有的路由,你可能需要重新编译不仅仅是C++连接器。

< P>关于扩展和相关错误。,您还需要链接resolv库。将-lresolv添加到链接器命令行。请在阅读本文的其余部分之前进行尝试

正如您正确指出的,如果您希望构建应用程序,以便不需要额外的文件,那么您必须链接到MySQL的静态库,以及MySQL所需的所有静态库。要正确链接,您需要使用与构建MySQL库相同的OpenSSL库

有两条路要走,要么获得MySQL用于构建现成库的相同版本的OpenSSL静态库,要么使用现有的OpenSSL版本重新编译MySQL库

<> P>只是为了增加混淆,上次我做的MySQL C++连接器依赖于MySQL运行时的C库。我相信这就是OpenSSL的输入所在。所以如果你重新编译所有的路由,你可能需要重新编译而不仅仅是C++连接器。
Scanning dependencies of target SQL
[ 50%] Building CXX object CMakeFiles/SQL.dir/main.cpp.o
[100%] Linking CXX executable SQL
[100%] Built target SQL
dyld: Library not loaded: libssl.1.1.dylib
  Referenced from: /Users/paperino/dev/cpp/learn/mysql/build/./SQL
  Reason: image not found
Abort trap: 6
Scanning dependencies of target SQL
[ 50%] Building CXX object CMakeFiles/SQL.dir/main.cpp.o
[100%] Linking CXX executable SQL
Undefined symbols for architecture x86_64:
  "_res_9_dn_expand", referenced from:
      sql::mysql::srv_list(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned short&) in libmysqlcppconn-static.a(mysql_connection.cpp.o)
  "_res_9_nclose", referenced from:
      sql::mysql::srv_list(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned short&) in libmysqlcppconn-static.a(mysql_connection.cpp.o)
  "_res_9_ninit", referenced from:
      sql::mysql::srv_list(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned short&) in libmysqlcppconn-static.a(mysql_connection.cpp.o)
  "_res_9_ns_initparse", referenced from:
      sql::mysql::srv_list(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned short&) in libmysqlcppconn-static.a(mysql_connection.cpp.o)
  "_res_9_ns_parserr", referenced from:
      sql::mysql::srv_list(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned short&) in libmysqlcppconn-static.a(mysql_connection.cpp.o)
  "_res_9_nsearch", referenced from:
      sql::mysql::srv_list(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned short&) in libmysqlcppconn-static.a(mysql_connection.cpp.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [SQL] Error 1
make[1]: *** [CMakeFiles/SQL.dir/all] Error 2
make: *** [all] Error 2