2008-10-19 98 views
0

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

我得到以下信息:

./mysqlTest:符号`_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE” 在共享对象不同的尺寸,考虑重新链接。
分段故障

有什么我必须重建,链接或任何所以我的应用程序重新工作?
mysql C API呢? mysql ++是一个包装器。
应该重建mysql C API吗?

请帮忙,我不知道该怎么办。我需要做这个工作。

回答

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

+0

将参数传递给gcc。谢谢。编辑它有点澄清。 – 2008-10-19 09:37:03

0

重建mysql ++之前“干净”吗?

好像mysqlTest程序没有重新编译,仍然想要以前的lib。

如果你确实做了清洁(假设mysqlTest是一个程序包),那么在安装新库之后你是否'ldconfig'?

0

是的,我在重建之前做了“干净”。
mysqlTest是我的一个程序。在升级GCC之前,我仍然有我编译的版本,它工作正常。但是我升级后编译的那个错误。

我没有太LDCONFIG,我得到这个消息:

LDCONFIG:/usr/lib/libdb_cxx-4.2.so不是一个符号链接

我不知道,如果这只是一个警告或者是否意味着这个过程被打断了。

0

在回答moocha:

我重建我的应用程序是使用一些其他的事情,我设法使一个简单的程序工作。

虽然我仍然有一些复杂的程序问题,我试图这样解决。

我很确定libdb_cxx-4.2.so的东西不是问题,因为我记得前一段时间当我运行ldconfig时看到那条消息。 即便如此,我该如何摆脱该错误信息呢?我经常有链接问题,我必须通过手动使用-L和-l