MySQL Connector / C ++ аварийно завершает работу с g ++ 8.1.0 и C ++ 17 - PullRequest
0 голосов
/ 30 октября 2018

Я только начал программировать на C ++ с использованием Visual Studio 2017 и подключился к своей базе данных. Пока все работало нормально. Затем я захотел использовать функцию c ++ 17 и понял, что мне нужно обновить компилятор.

После обновления моего компилятора до g ++ 8.1.0 с использованием этого блога с этими командами (и большим количеством проб и ошибок):

git clone https://bitbucket.org/sol_prog/raspberry-pi-gcc-binary.git
cd raspberry-pi-gcc-binary
tar xf gcc-8.1.0.tar.bz2
mv gcc-8.1.0 /usr/bin
cd ..
rm -r raspberry-pi-gcc-binary
rm /usr/bin/gcc
rm /usr/bin/g++
ln -s /usr/bin/gcc-8.1.0/bin/gcc-8.1.0 /usr/bin/gcc
ln -s /usr/bin/gcc-8.1.0/bin/g++-8.1.0 /usr/bin/g++

 # After getting the error "GLIBCXX_3.4.21 not found" I did the following:
rm /usr/lib/arm-linux-gnueabihf/libstdc++.so.6
 # I don't know if this (next line) was necessary
rm /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.22
ln -s /usr/bin/gcc-8.1.0/lib/libstdc++.so.6.0.25 /usr/lib/arm-linux-gnueabihf/libstdc++.so.6

Теперь программа компилируется, но когда я ее выполняю, происходит сбой. Когда я переключаюсь на старый компилятор (g ++ - 4.9), он снова работает. Возможно, новый компилятор установлен неправильно. Инструкции по установке GCC-8 на Raspbian были бы отличными.

Это в основном программа:

#include<string>
#include<stdlib.h>
#include<iostream>
#include<exception>

#include<mysql_driver.h> //OR #include<cppconn/driver.h>
#include<mysql_connection.h> //OR #include<cppconn/connection.h>

sql::mysql::MySQL_Driver* driver; //OR sql::Driver*
sql::Connection* conn;

int main(const int argc, const char* argv[]) {
  try {
        driver = sql::mysql::get_driver_instance(); //OR get_driver_instance();
        conn = driver->connect("tcp://127.0.0.1:3306", "root", "MY_PW");
        conn->setSchema("MY_DB");
    } catch (std::exception &e) {
        //err("Failed to connect to the database.", e);
    }
}

И это ошибка, которую я получаю в Visual studio:

Прервано (gdb) 1055-var-create - * "__size" (gdb) 1066-stack-select-frame 16 (GDB) 1067-var-create - * "argc" Поток «LSTGA.out» (0x5cfa) завершил работу с кодом 0 (0x0). Программа имеет выход с кодом 0 (0x0).

И это ошибка, которую я получаю при запуске напрямую через SSH:

* Ошибка в `./LSTGA.out ': munmap_chunk (): неверный указатель: 0x7ec3c50c * Отменено

Стек вызовов:

enter image description here

Дополнительная информация:

  • Предыдущий компилятор: gcc-4.9 / g ++ - 4.9 (все еще присутствует)
  • Новый компилятор: gcc-8.1.0 / g ++ - 8.1.0
  • Предыдущий LIBSTDC ++: 6.0.22 (удален)
  • Новый LIBSTDC ++: 6.0.25
  • Удаленная машина: Raspberry Pi 2b
  • Удаленная ОС: Raspbian
  • Локальная ОС: Windows 10
  • Visual studio Community 2017 15.8.8

Заранее спасибо. -Minding

1 Ответ

0 голосов
/ 31 октября 2018

Я нашел проблему здесь :

Даже небольшое изменение в версии компилятора может вызвать проблемы. Если вы получаете сообщения об ошибках, которые, как вы подозреваете, связаны с двоичной несовместимостью, соберите Connector / C ++ из исходного кода, используя тот же компилятор и компоновщик, который вы используете для сборки и компоновки своего приложения.

Таким образом, решение состоит в том, чтобы собрать MySQL Connector / C ++ из исходного кода, как описано здесь .

Надеюсь, это поможет.

...