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
调用堆栈:
附加信息:
- 以前的编译器:gcc-4.9 / g++-4.9(仍然存在)
- 新编译器:gcc-8.1.0 / g++-8.1.0
- 以前的 LIBSTDC++:6.0.22(已删除)
- 新 LIBSTDC++:6.0.25
- 远程机器:Raspberry Pi2b
- 远程OS:Raspbian
- 本地 OS: Windows 10
- Visual studio 社区 2017 15.8.8
提前致谢。 -心灵
我发现问题 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++
希望对您有所帮助。
我刚开始使用 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
调用堆栈:
附加信息:
- 以前的编译器:gcc-4.9 / g++-4.9(仍然存在)
- 新编译器:gcc-8.1.0 / g++-8.1.0
- 以前的 LIBSTDC++:6.0.22(已删除)
- 新 LIBSTDC++:6.0.25
- 远程机器:Raspberry Pi2b
- 远程OS:Raspbian
- 本地 OS: Windows 10
- Visual studio 社区 2017 15.8.8
提前致谢。 -心灵
我发现问题 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++希望对您有所帮助。