【问题标题】:MySQL++ library doesn't work after upgrading GCC升级 GCC 后 MySQL++ 库不起作用
【发布时间】:2010-09-17 23:43:33
【问题描述】:

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

我收到以下消息:

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

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

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

【问题讨论】:

    标签: linux gcc mysql++


    【解决方案1】:

    回复moocha:

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

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

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

    【讨论】:

      【解决方案2】:

      将 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

      【讨论】:

        【解决方案3】:

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

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

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

        我不知道这只是一个警告还是意味着进程被中断了。

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2015-12-08
            • 2017-07-06
            • 1970-01-01
            • 1970-01-01
            • 2015-12-10
            • 2015-02-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多