MySQL Connector/C++ 在 g++8.1.0 和 C++17 中崩溃

MySQL Connector/C++ crashes with g++8.1.0 and C++17

我刚开始使用 Visual Studio 2017 年的 C++ 编程并连接到我的数据库。到目前为止一切正常。然后我想使用 c++17 功能并意识到我需要升级我的编译器。

将我的编译器升级到 g++8.1.0 后,使用 this blog 和这些命令(以及大量的试验和错误):

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) 时,它再次工作。也许新的编译器没有正确安装。关于如何在 Raspbian 上安装 GCC-8 的说明会很棒。

基本上就是这个程序:

#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

调用堆栈:

附加信息:

提前致谢。 -心灵

我发现问题 here:

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.

所以解决方案是按照 here.

从源代码构建 MySQL Connector/C++

希望对您有所帮助。