Segfault в AIX из большой библиотеки C ++ - PullRequest
0 голосов
/ 31 августа 2010

Я пытаюсь преобразовать библиотеку на основе Windows, которую моя компания производит для работы в AIX.В настоящее время мы можем запустить его на Solaris и Linux, но AIX вызывает некоторые дополнительные проблемы.Я не уверен, является ли это проблемой установки ОС или проблемой кодирования, но я сначала пробую подход к кодированию.Библиотека экспортирует некоторые функции, используя соглашение о стиле C из различных модулей.Мое тестовое приложение может успешно вызывать некоторые функции из некоторых модулей.Однако есть один конкретный модуль, в котором каждая функция работает с ошибками.Я поместил сообщение журнала Cout в верхней части функции, и это не получает удар.Просмотр coredump с помощью dbx показывает только то, что ошибкой является недопустимый код операции 0x0.Я попытался написать тестовое приложение, которое экспортирует функцию из библиотеки и использует ее в приложении, и это нормально.Я также попытался написать тестовое приложение меньшего размера, которое содержит ссылки только на модуль, содержащий функции-нарушители.В этом случае я могу запустить регистрацию в функции.У меня отключены все оптимизации и одни и те же флаги / версии компилятора для приложения и библиотеки.

Мне кажется, что библиотека слишком большая / экспортирует слишком много функций, и что-то становится поврежденным / переполненным.У меня нет опыта работы с AIX, поэтому любые указания относительно того, вероятно ли это или другие способы использовать его для отладки, будут весьма полезны.

1 Ответ

0 голосов
/ 01 сентября 2010

Сегфоут - это красная сельдь.Проблема заключалась в том, что я использовал -G в строке компоновщика в приложении.Кажется, это говорит компоновщику, что вы используете компоновку во время выполнения, и поэтому он игнорирует неопределенные функции.Когда я вызывал недоопределенную функцию, которая не была динамически связана с ней, происходил сбой.Как только я убрал флаг -G из приложения, у меня был список неопределенных символов для функций, которые вызывали у меня проблемы.Я до сих пор не до конца понимаю, почему, но обрезка флагов обратного компоновщика, кажется, немного решила эту проблему (в частности, я удалил флаг -shared, который был у меня в библиотеке).Мне просто нужно статически связать некоторые сторонние библиотеки, и все будет готово.

...