Я занимаюсь разработкой mysql проекта с Visual Studio cmake Remote linux.
Моя версия vs2017, cmake 3.8 (от установки установщика), mysql 8.0.18, mysql коннектор c ++ 8.0, boost_1_64_0,
и мой linux os - это centos 8.
Сначала я проверяю код в Windows -debug в vs, он успешно выполняется,
затем я связываю свой VMWave centos8, произошла ошибка.
con = driver->connect(host.c_str(), user.c_str(), password.c_str());
Vs скажи мне Ошибка сегментации в строке ie.
Есть мой cmakelist. txt
cmake_minimum_required (VERSION 3.8)
IF(WIN32)
INCLUDE_DIRECTORIES("C:/Program Files/MySQL/MySQL Connector C++ 8.0/include")
ENDIF(WIN32)
IF(UNIX)
INCLUDE_DIRECTORIES("/usr/local/mysql-connector-c++/include")
ENDIF(UNIX)
FIND_PACKAGE(Boost)
IF(Boost_FOUND)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
ENDIF(Boost_FOUND)
IF(WIN32)
LINK_DIRECTORIES("C:/Program Files/MySQL/MySQL Connector C++ 8.0/lib64/vs14")
LINK_DIRECTORIES("C:/Program Files/MySQL/mysql-8.0.18-winx64/lib")
ENDIF(WIN32)
IF(UNIX)
LINK_DIRECTORIES("/usr/local/mysql-connector-c++/lib64")
LINK_DIRECTORIES("/usr/local/mysql/lib")
ENDIF(UNIX)
add_executable (CMakeLinkLinux "CMakeLinkLinux.cpp" "CMakeLinkLinux.h")
IF(WIN32)
TARGET_LINK_LIBRARIES(CMakeLinkLinux mysqlcppconn.dll libmysql.dll)
ENDIF(WIN32)
IF(UNIX)
TARGET_LINK_LIBRARIES(CMakeLinkLinux libmysqlcppconn.so libmysqlclient.so)
ENDIF(UNIX)
main. cpp
#include "CMakeLinkLinux.h"
#include <mutex>
using namespace std;
int main()
{
mutex mtx;
int flag;
cout << "Hello CMake." << endl;
try {
sql::Driver *driver=NULL;
sql::Connection *con=NULL;
sql::Statement *stmt=NULL;
sql::ResultSet *res=NULL;
//tcp://192.168.248.128:3306
string host = "tcp://192.168.248.128:3306";
string user = "root";
string password = "123";
string database = "INFORMATION_SCHEMA";
mtx.lock();
driver = get_driver_instance();
if (!driver) {
cout << "driver error" << endl;
}
mtx.unlock();
driver->threadInit();
cout << "connecting......mysql" << endl;
con = driver->connect(host.c_str(), user.c_str(), password.c_str());
cout << "connected successfully" << endl;
con->setSchema(database);
stmt = con->createStatement();
res = stmt->executeQuery("SELECT TABLE_SCHEMA,TABLE_NAME,CREATE_OPTIONS FROM TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION%'");
while (res->next()) {
cout << "TABLE_SCHEMA:";
cout << res->getString("TABLE_SCHEMA").c_str() << endl;
cout << "TABLE_NAME:";
cout << res->getString("TABLE_NAME").c_str() << endl;
cout << "CREATE_OPTIONS:";
cout << res->getString("CREATE_OPTIONS").c_str() << endl;
}
delete res;
delete stmt;
delete con;
driver->threadEnd();
}
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;
cout << "link failed" << endl;
}
cin >> flag;
return 0;
}
Я нахожу ANS от Google и многими способами, я не знал, почему в моем коде ошибка сегментации, кто-то говорит Блокировка кода драйвера может выполняться в stackoverflow, но у меня все еще ошибка сегментации в моем коде.
Обновление:
Вывод GDB:
Type "apropos word" to search for commands related to "word".
Warning: Debuggee TargetArchitecture not detected, assuming x86_64.
=cmd-param-changed,param="pagination",value="off"
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Breakpoint 1, main () at /var/tmp/src/2d31707c-c3da-e131-91d2-9c506bc1ae02/Linux-Debug/CMakeLinkLinux/CMakeLinkLinux.cpp:9
9 cout << "Hello CMake." << endl;
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff5f9ae88 in __memmove_avx_unaligned_erms () from /lib64/libc.so.6
Segmentation fault