升级GCC后,MySQL ++库不起作用

时间:2008-10-19 09:10:20

标签: linux gcc mysql++

我使用的是mysql ++库,并使用GCC 3.3.4进行编译 GCC版本有一些错误,所以我升级到GCC 3.4.6 升级GCC后,我重建了mysql ++并重新编译了我的程序。但是现在我遇到了分段错误错误。

我收到以下消息:

  

./ mysqlTest:符号`_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE'   在共享对象中具有不同的大小,请考虑重新链接   分段错误

我有什么需要重建,重新链接或其他任何东西,以便我的应用程序再次工作吗? mysql C API怎么样? mysql ++是它的包装 应该重建mysql C API还是什么?

请帮助,我不知道该怎么做。我需要做这项工作。

4 个答案:

答案 0 :(得分:3)

将C ++标准库从GCC 3.3升级到GCC 3.4后,如果程序使用它们,必须重新编译所有链接的库,同时还要直接链接到标准C ++库。在您的情况下,考虑到您的后续行动,libdb_cxx-4.2出现故障,因此重建Berkeley DB 4.2。基本上,mysqlTest链接新的C ++标准库和Berkeley DB,但Berkeley DB链接旧的。链接器将从两个库中提取符号,但其中一些内联存储类可能已更改,而Berkeley DB将会混淆。

要检查您使用的库,请针对二进制文件运行ldd,然后对列表中的每个C ++库运行ldd

答案 1 :(得分:0)

在重建mysql ++之前你有没有“干净”?

似乎mysqlTest程序没有重新编译,仍然需要以前的lib。

如果你确实做了make clean(假设mysqlTest是程序包中的程序),你在安装新库后是否'lconfig'?

答案 2 :(得分:0)

是的,我在重建之前做了“干净” mysqlTest是我的一个程序。在升级GCC之前我还有我编译的版本,它运行正常。但是我升级后编译的那个给出了这个错误。

我也做了ldconfig,我收到了这条消息:

  

ldconfig:/usr/lib/libdb_cxx-4.2.so不是符号链接

我不知道这只是一个警告,还是表示该过程被中断了。

答案 3 :(得分:0)

回复moocha:

我重建了我的应用程序正在使用的其他一些东西,并设法制作一个简单的程序。

我仍然遇到一些复杂程序的问题,我正在努力解决这个问题。

我很确定libdb_cxx-4.2.so不是问题,因为我记得我在运行ldconfig之前看到过那段消息。 即便如此,我怎样才能摆脱那条错误信息呢?我经常遇到链接问题,我必须使用-L和-l

手动将参数传递给gcc