2016-09-13 2 views
0

작은 C++ 프로젝트가있어서이 프로젝트에서 mySQL DB에 액세스해야하므로 C++ 용 mySQL Connector를 설치해야합니다. 이것은 OS X 10.10에서 수행되며 컴파일/링크에는 아무런 문제가 없습니다.Mysql Connector connect() issues

나는 모든 mysql 항목에 대한 클래스를 작성했으며 생성자에서 db에 대한 연결을 설정하려고한다. 그러나 이것은 다소 어려워 보입니다.

mysql db("tcp://127.0.0.1:3306", "root", "secretsecret"); 
:이 같은 클래스의 객체를 생성 할 때, 그러나

mysql::mysql(std::string server, std::string user, std::string password){ 

    driver = sql::mysql::get_mysql_driver_instance(); 

    try{ 

    con = driver->connect(server, user, password); 

    last_error = ""; 

    } 
    catch(sql::SQLException &e){ 

    last_error = e.what(); 

    } 

} 

: 구현 여기

class mysql{ 

public: 

    mysql(std::string server, std::string user, std::string password); 

private: 

    sql::mysql::MySQL_Driver *driver; 
    sql::Connection *con; 

    std::string last_error = ""; 

}; 

그리고 다음은

는 관련 클래스에서 일부입니다

다음이 last_error 문자열에 있습니다.

Unknown MySQL server host '???' (0)

"호스트"는 때로는 코드에서 변경하지 않아도 다를 수 있습니다. 이것은 내부적으로 다른 메모리 위치가 있어야하는 것처럼 읽혀지는 것처럼 보입니다. 하지만 직접 호출 할 때 connect() 변수를 직접 전달하더라도이 오류가 발생합니다. 이 세 변수를 mysql 클래스에 내부적으로 저장하고 connect()를 호출 할 때 사용합니다.

누구든지이 문제를 일으킬 수있는 아이디어가 있습니까? 다른 프로젝트에서 이와 비슷한 작업을 수행하여 잘 작동하지만 다소 혼란 스럽습니다./

+0

"서버"가 전달되는 메모리 손상과 비슷합니다. – blackpen

+0

그게 내가 생각한 그게 뭔지는 모르겠지만 .. 왜 손상되는지 모르겠다. –

+0

최소한의 테스트 케이스를 만들고 문제를 재현 한 다음 디버거로 들어가서 ** MySQL_Driver :: connect **에서 코드를 깨면된다. 그것은 ** hostName **을 인쇄하고자하는 장소입니다. – blackpen

답변

0

post은 상황에 따라 다릅니다 (Linux에서는 C++ 커넥터가 작동하고 OSX에서는 실패 함).

mysql 로깅/추적을 사용하거나 디버거에서 실행하면 더 많은 정보를 수집하여 MySQL 개발자에게보고 할 수 있습니다. 운이 좋을 수도 있습니다.

0

난이 가장 유용한 링크를 발견 googeling의 긴 시간 후 : 원인이 거기에 힌트를 다음 https://apple.stackexchange.com/questions/251290/weird-behaviour-of-mysql-connector-c-in-osx

, 내가 myscl의 C 커넥터 다음 MySQL의 C++ 커넥터를 재 컴파일 (버전 1.1.6 원인 1.1.7 컴파일하는 동안 json 오류가 발생 함).

또한 Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++가 라이브러리를 컴파일하는 데 사용 된 C++ 커넥터의 cmake 로그에서 보았습니다.

그래서 제 컴파일에도 사용되었습니다. 그것은이이 오류의 결과로 내 프로젝트 메신저도 포함 wxwisgeds 그래도 작동 것이라고 할 수있다 : 그 일에 대한 몇 가지 힌트를 발견하지만 그들은 모두 그냥 새로운 오류의 매시브 양을 생산

/usr/local/include/wx-3.0/wx/strvararg.h:30:18: fatal error: 'tr1/type_traits' file not found 
    #include <tr1/type_traits> 

, 그래서 중지 여기서 더 깊게 파고들.

가장 좋은 옵션은 mysql과 통신하기 위해 두 개의 별도 프로그램을 만들고 gui를 제공하기 위해 하나는 mysql db에 매우 비효율적 인 액세스를 제공하는 소켓이나 파일을 통해 서로 통신하도록합니다.

같은 일을하는 사람에게 행운을 비네.