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

我收到以下消息:

  

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

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

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

有帮助吗?

解决方案

将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

其他提示

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

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

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

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

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

  

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

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

回复moocha:

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

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

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

手动将参数传递给gcc
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top