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

时间:2018-10-30 19:07:34

标签: c++ gcc mysql-connector

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

使用this blog通过以下命令将编译器升级到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)时,它将再次起作用。也许新的编译器没有正确安装。有关如何在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中遇到的错误:

  

中止(gdb)1055-var-create-*“ __size”(gdb)   1066-堆栈选择帧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

先谢谢了。 -思维

1 个答案:

答案 0 :(得分:0)

我发现了问题here

  

即使编译器版本进行很小的更改也会引起问题。如果您获得怀疑与二进制不兼容有关的错误消息,请使用用于构建和链接应用程序的相同编译器和链接器从源代码构建连接器/ C ++。

因此解决方案是按照here所述从源代码构建MySQL Connector / C ++。

我希望这会有所帮助。