Как подключиться к Mysql с помощью C++ в Mac OSX
Привет ребята,
Сегодня я изо всех сил пытался подключиться к MySQL на С++ в OSX, и я провел много исследований, но там не было никакой помощи, тогда мне пришлось самому искать решение, и я решил поделиться решением со всеми, кто борется с той же ситуацией для подключения mysql в c++ в OSX.
Были некоторые ошибки, которые я получал при подключении:
ERROR libc++abi.dylib: terminating with uncaught exception of type sql::SQLException Abort trap: 6
Вы можете проверить демо-репозиторий GitHub, который я создал там https://github.com/khanakia/mysql-connector-cpp-macos
Существует два способа подключения с помощью файла mysql.h или с помощью коннектора mysql. Вы можете использовать любой из методов, указанных ниже.
Способ 1 — Использование Mysql.h
Вы можете проверить пример файла demo1.cpp, который использует mysql.h.
По умолчанию g++ использует компилятор clang, который поставляется с Xcode, который не является подлинным компилятором, поэтому вам необходимо переустановить его, чтобы получить подлинный компилятор для g++. Вы можете проверить версию с помощью g++ — версия
Вот шаги:
Вам нужно будет установить macports и mysql, используя приведенные ниже команды.
// Install macports using brew sudo port selfupdate sudo port install gcc46 sudo port select --set gcc mp-gcc46 gcc --version // It should Say (gcc (MacPorts gcc46 4.6.4_11) 4.6.4) ... // Installing and running mysql brew install mysql
Теперь вы создаете новый файл demo1.cpp и вставляете этот код, или вы можете проверить ссылку на репозиторий github, которой я поделился
/* Standard C++ includes */ #include <stdlib.h> #include <iostream> #include <mysql.h> using namespace std; int main(void) { // std::vector<std::string> tables; MYSQL_RES *result; MYSQL_ROW row; MYSQL *connection, mysql; int state; mysql_init(&mysql); connection = mysql_real_connect(&mysql,"127.0.0.1","root","root","mysql",0,0,0); // cout << connection; if (connection == NULL) { std::cout << mysql_error(&mysql) << std::endl; // return tables; } 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); }
Теперь скомпилируйте и запустите файл, используя приведенную ниже команду.
g++ -o demo1 -I/usr/local/include -I/usr/local/include/mysql -W -lmysqlclient -L/usr/local/lib demo1.cpp ./demo1
Способ 2 — Использование Mysql Connector CPP
Сначала вам нужно будет загрузить коннектор для OSX, выполнив следующие действия.
- Загрузите Mysql C++ Connector для Mac OS отсюда https://dev.mysql.com/downloads/connector/cpp/
- Извлеките каталог cppconn и файлы mysql_connection.h, mysql_driver.h, mysql_error.h в корневой каталог вашего приложения.
Теперь создайте файл DYLIB из коннектора cpp, используя тот же компилятор, который мы используем для компиляции нашего кода.
git clone https://github.com/mysql/mysql-connector-cpp . git checkout 1.1 git tag git checkout tags/1.1.9 which g++ which gcc cmake -DCMAKE_C_COMPILER=/opt/local/bin/gcc -DCMAKE_CXX_COMPILER=/opt/local/bin/g++ . make make install
ПРИМЕЧАНИЕ. Вы должны найти файлы dylib в директории драйверов и скопировать эти файлы в тот же каталог, где находится ваш код.
Теперь вы создаете новый файл demo.cpp и вставляете этот код, или вы можете проверить ссылку на репозиторий github, которой я поделился
/* Standard C++ includes */ #include <stdlib.h> #include <iostream> /* Include directly the different headers from cppconn/ and mysql_driver.h + mysql_util.h (and mysql_connection.h). This will reduce your build time! */ #include "mysql_connection.h" #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> using namespace std; int main(void) { cout << endl; sql::Driver *driver; sql::Connection *con; sql::Statement *stmt; sql::ResultSet *res; /* Create a connection */ driver = get_driver_instance(); con = driver->connect("tcp://127.0.0.1:3306", "root", "root"); /* Connect to the MySQL test database */ con->setSchema("mysql"); stmt = con->createStatement(); res = stmt->executeQuery("SELECT 'Hello World!' AS _message"); while (res->next()) { cout << "\t... MySQL replies: "; /* Access column data by alias or column name */ cout << res->getString("_message") << endl; cout << "\t... MySQL says it again: "; /* Access column data by numeric offset, 1 is the first column */ cout << res->getString(1) << endl; } delete res; delete stmt; delete con; cout << endl; return EXIT_SUCCESS; }
Теперь скомпилируйте и запустите файл, используя приведенную ниже команду.
g++ -o demo -I/usr/local/include -I/Volumes/D/www/c++ -L. -lmysqlcppconn demo.cpp ./demo
Если вы нашли мою статью полезной, пожалуйста, не забудьте поделиться ею и поставить лайк. Спасибо, парни.