0

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

我收到以下消息:

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

有什么我必须重建、重新链接或其他任何东西才能让我的应用程序再次运行的东西吗?
mysql C API怎么样?mysql++ 是它的包装器。
应该重建mysql C API还是什么?

请帮忙,我不知道该怎么办。我需要完成这项工作。

4

4 回答 4

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针对您的二进制文件运行,然后ldd针对列表中的每个 C++ 库运行。

于 2008-10-19T09:34:04.260 回答
0

在重建 mysql++ 之前,你“make clean”了吗?

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

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

于 2008-10-19T09:15:52.783 回答
0

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

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

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

我不知道这是否只是一个警告,或者这是否意味着该过程被中断。

于 2008-10-19T09:29:49.200 回答
0

回复 moocha:

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

不过,我仍然对复杂的程序有一些问题,我正在尝试解决这些问题。

我很确定 libdb_cxx-4.2.so 不是问题,因为我记得前段时间我在运行 ldconfig 时看到了该消息。即便如此,我怎样才能摆脱该错误消息?我经常遇到链接问题,我必须使用 -L 和 -l 手动将参数传递给 gcc

于 2008-10-19T10:25:43.143 回答