我使用的是mysql ++库,并使用GCC 3.3.4进行编译 GCC版本有一些错误,所以我升级到GCC 3.4.6 升级GCC后,我重建了mysql ++并重新编译了我的程序。但是现在我遇到了分段错误错误。
我收到以下消息:
./ mysqlTest:符号`_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE' 在共享对象中具有不同的大小,请考虑重新链接 分段错误
我有什么需要重建,重新链接或其他任何东西,以便我的应用程序再次工作吗? mysql C API怎么样? mysql ++是它的包装 应该重建mysql C API还是什么?
请帮助,我不知道该怎么做。我需要做这项工作。答案 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