Я только начал программировать на 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:
Aborted (gdb) 1055-var-create - * "__size" (gdb) 1066-stack-select-frame 16 (gdb) 1067-var-create - * "argc" The thread 'LSTGA.out' (0x5cfa) has exited with code 0 (0x0). The program '' has exited with code 0 (0x0).
И это ошибка, которую я получаю при запуске напрямую через SSH:
* Error in `./LSTGA.out': munmap_chunk(): invalid pointer: 0x7ec3c50c * Aborted
Стек вызовов:
Дополнительная информация:
Заранее спасибо. -Обзор
@JesperJuhl, очень хороший вопрос: D Как я уже сказал, я новичок в C++ и не знаю, как установить последнюю версию на свой raspberry pi, но если есть пакет, который я мог бы установить (предпочтительно с помощью apt-get), я бы Любить.
Я не понимаю, как Visual Studio учитывает это.
@LightnessRacesinOrbit Это просто для полноты, так как он запускает компилятор и передает ему аргументы.
На Raspberry Pi ?! Или через какое-то сетевое соединение? В любом случае, это просто отвлечение - давайте абстрагируемся от этого и просто сосредоточимся на проблеме, которая заключается в том, что вы больше не можете получить рабочую программу, созданную на вашем Raspberry Pi. ПК с Windows 10 не имеет значения.
... если проблема не в том, как вы выполняете удаленную отладку (в сообщении об ошибке действительно написано "gdb"), но если это так, у нас действительно недостаточно информации для диагностики. По крайней мере, вам придется лучше объяснить свою установку ...
@LightnessRacesinOrbit Я (создаю и) запускаю программу через функцию отладки Visual Studio удаленно на моем raspberry pi в моей домашней сети. - И теперь я снова заставил его работать, используя старый компилятор, поэтому я думаю, что проблема с моей новой установкой компилятора.
Как вы «заставили его снова работать с помощью старого компилятора»? Что ты сделал? Что вы изменили? Укажите подробные, точные шаги воспроизведения в своем вопросе.
@LightnessRacesinOrbit Я думаю, что старый компилятор работал все время, и я был просто сбит с толку. (Потому что я только что скопировал libstdC++. So.6.0.22, который я удалил ранее из другого raspberry pi, на этот, и он работал, но затем я удалил его снова, и он все еще работает.) Так что я почти уверен, что это действительно мой новый установка или проблема совместимости.
Я обнаружил проблему здесь:
Even a small change in the compiler version can cause problems. If you obtain error messages that you suspect are related to binary incompatibilities, build Connector/C++ from source, using the same compiler and linker that you use to build and link your application.
Таким образом, решение состоит в создании MySQL Connector / C++ из исходного кода, как описано здесь.
Надеюсь, это поможет.
Просто любопытно; если вам нужно обновить компилятор, почему вы должны перейти на gcc 8.1, а не сразу на последнюю версию 8.2.1 (на момент написания)?