繁体   English   中英

如何在 m1 Mac 上将 MySQL 连接到 c++?

[英]How to connect MySQL to c++ on m1 Mac?

我正在使用 Apple M1 MacBook Air。 我想将 MySQL 连接到 c++。 我尝试了 2 个变体:从官方MySQL 网站(使用 jdbc.h)安装的“c++ 连接器”和安装了“brew install mysql”的“mysql-8.0.26-macos11-arm64”。 我可以将它们都包括在内:

#include </usr/local/mysql-connector-c++-8.0.27/include/mysql/jdbc.h>

或者

#include </usr/local/mysql-8.0.26-macos11-arm64/include/mysql.h>

它成功编译。

但是当我尝试编写使用任何这些库的任何代码时,它会给出错误:

JDBC 的代码:

#include </usr/local/mysql-connector-c++-8.0.27/include/mysql/jdbc.h>

using namespace std;

int main() {
        try {
                sql::mysql::MySQL_Driver *driver;
                sql::Connection *con;
        
                driver = sql::mysql::get_mysql_driver_instance();
                con = driver->connect("tcp://127.0.0.1:3306", "root", "rootpass");
        
                delete con;
        } catch (sql::SQLException &e) {
          cout << "# ERR: SQLException in " << __FILE__;
          cout << "(" << __FUNCTION__ << ") on line "
             << __LINE__ << endl;
          cout << "# ERR: " << e.what();
          cout << " (MySQL error code: " << e.getErrorCode();
          cout << ", SQLState: " << e.getSQLState() << " )" << endl;
        }
        return 0;
}

错误:

Undefined symbols for architecture arm64:
  "check(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      check_lib() in sql-c9ebd3.o
  "check(std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > const&)", referenced from:
      check_lib() in sql-c9ebd3.o
  "sql::mysql::_get_driver_instance_by_name(char const*)", referenced from:
      sql::mysql::get_driver_instance_by_name(char const*) in sql-c9ebd3.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

'brew' 中 mysql-arm64 的代码:

#include </usr/local/mysql-8.0.26-macos11-arm64/include/mysql.h>
#include <iostream>
#include <stdlib.h>

using namespace std;
int main(void)
{
  MYSQL_RES *result;
  MYSQL_ROW row;
  MYSQL *connection, mysql;

  int state;

  mysql_init(&mysql);

  connection = mysql_real_connect(&mysql,"127.0.0.1","root","rootpass","mysql",0,0,0);

  if (connection == NULL)
  {
    std::cout << mysql_error(&mysql) << std::endl;
  }
state = mysql_query(connection, "SHOW TABLES");
  if (state !=0)
  {
    std::cout << mysql_error(connection) << std::endl;
  }

  result = mysql_store_result(connection);

  std::cout << "tables: " << mysql_num_rows(result) << std::endl;
  while ( ( row=mysql_fetch_row(result)) != NULL )
  {
    cout << row[0] << std::endl;
  }

  mysql_free_result(result);
  mysql_close(connection);
  return 0;
}

错误:

Undefined symbols for architecture arm64:
    "_mysql_close", referenced from:
      _main in sql_another-80b5eb.o
  "_mysql_error", referenced from:
      _main in sql_another-80b5eb.o
  "_mysql_fetch_row", referenced from:
      _main in sql_another-80b5eb.o
  "_mysql_free_result", referenced from:
      _main in sql_another-80b5eb.o
  "_mysql_init", referenced from:
      _main in sql_another-80b5eb.o
  "_mysql_num_rows", referenced from:
      _main in sql_another-80b5eb.o
  "_mysql_query", referenced from:
      _main in sql_another-80b5eb.o
  "_mysql_real_connect", referenced from:
      _main in sql_another-80b5eb.o
  "_mysql_store_result", referenced from:
      _main in sql_another-80b5eb.o
   ld: symbol(s) not found for architecture arm64
   clang: error: linker command failed with exit code 1 (use -v to see invocation)

或者,用于 c++ 的 MySQL 连接器在 M1 MacBook 上不可用?

请帮帮我)))

是的你是对的。 还没有用于 M1 的 c++ 的 MySQL 连接器。

我希望您在此期间找到了解决方案,否则这是可行的。 我正在使用通过 Homebrew 安装的 Macbook Air M1、MacOs 12.2 Monterey、MySQL( brew install mysql )。 Openssl 也通过自制软件安装。

编译我使用: gcc -o filename.out filename.c `mysql_config --libs`

请注意最后一个命令中使用的反引号

我第一次使用这个命令时,ld 没有找到其他库(zstd、ssl 等):只需通过此命令方案将正确的路径添加到 LIBRARY_PATH: export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix NAME_OF_LIBRARY)/lib/

例如,如果缺少的库是 lssl,则 NAME_OF_LIBRARY 将为 ssl,或者如果错误是针对 lzstd,则 NAME_OF_LIBRARY 将为 zstd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM