Библиотека MySQL ++ не работает после обновления GCC - PullRequest
0 голосов
/ 19 октября 2008

Я использовал библиотеку mysql ++ и компилировал с GCC 3.3.4.
В этой версии GCC были некоторые ошибки, поэтому я обновился до GCC 3.4.6.
После обновления GCC я перестроил mysql ++ и перекомпилировал свою программу. Но теперь я получаю ошибку ошибки сегментации.

Я получаю следующее сообщение:

. / MysqlTest: Символ `_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE ' имеет другой размер в общем объекте, рассмотрите возможность повторного связывания.
Ошибка сегментации

Есть ли что-то, что я должен восстановить, перекомпоновать или что-то еще, чтобы мои приложения снова работали ??
А как насчет mysql C API? MySQL обертка вокруг него.
Должен ли MySQL C API быть перестроен или что-то ??

пожалуйста, помогите, я не знаю, что делать. Мне нужно сделать эту работу.

Ответы [ 4 ]

3 голосов
/ 19 октября 2008

После обновления стандартной библиотеки C ++ с GCC 3.3 до GCC 3.4 вы должны перекомпилировать все библиотеки, ссылающиеся на нее, если ваша программа использует их, и в то же время также ссылки на стандартную библиотеку C ++. В вашем случае, учитывая ваши последующие действия, виновата libdb_cxx-4.2, поэтому пересоберите Berkeley DB 4.2. По сути, mysqlTest ссылается как на новую стандартную библиотеку C ++, так и на Berkeley DB, но Berkeley DB ссылается на старую. Компоновщик извлечет символы из обеих библиотек, но класс встроенного хранилища для некоторых из них, вероятно, изменился, и DB Беркли запутается.

Чтобы проверить, какие библиотеки вы используете, запустите ldd для ваших двоичных файлов, а затем ldd для каждой библиотеки C ++ в списке.

0 голосов
/ 19 октября 2008

В ответ на муча:

Я перестроил некоторые другие вещи, которые использовало мое приложение, и мне удалось сделать простую программу для работы.

У меня все еще есть проблемы со сложными программами, которые я пытаюсь решить.

Я почти уверен, что проблема с libdb_cxx-4.2.so не проблема, потому что я помню, что видел это сообщение некоторое время назад, когда запустил ldconfig. Тем не менее, как я могу избавиться от этого сообщения об ошибке? У меня часто возникают проблемы со связыванием, и мне приходится вручную передавать параметры в gcc, используя -L и -l

0 голосов
/ 19 октября 2008

Да, я "очистил" перед восстановлением.
mysqlTest - моя программа. У меня все еще есть версия, которую я скомпилировал до обновления GCC, и она отлично работает. Но тот, который я скомпилировал после обновления, выдает эту ошибку.

Я тоже сделал ldconfig и получаю это сообщение:

ldconfig: /usr/lib/libdb_cxx-4.2.so не является символической ссылкой

Я не знаю, является ли это просто предупреждением или это означает, что процесс был прерван.

0 голосов
/ 19 октября 2008

Вы «очистили» перед сборкой mysql ++?

Похоже, что программа mysqlTest не была перекомпилирована и все еще требует предыдущую библиотеку.

Если вы действительно сделали make clean (предположим, что mysqlTest - это программа, входящая в пакет), вы установили ldconfig после установки новой библиотеки?

...