LINUX.ORG.RU

Какие-то прямо чудеса при сборке библиотеки. Как найти ошибку.

 , ,


0

2

Заранее извиняюсь за сумбур. Очень странная проблема.

Есть библиотека виджетов для Motif/X11. Собирается с помощью autotools. В составе пакета сами исходники библиотеки и примеры/тесты. Все собиралось и работало. Некоторое время назад переделал в библиотеке кое-что и добавил новый виджет. Соответственно добавил 3 теста/примера. Один из тестов вываливается с ошибкой.

Ошибка представляет собой сообщение о том, что неверно указано окно, для которого запрошено изменение каких-то параметров. Аналогичные ошибки я встречал неоднократно, когда при сборке приложения для Motif/Xt/X11 библиотеки указываются в некорректном порядке. Но у меня при сборке тестов в этом смысле все правильно. Это стало склонять меня к подозрению, что что-то не так с линковкой. К тому же другие тесты работали.

Поставил обработчик ошибки. Увидел, что после 3 ошибок выскакивает сообщение, что не определен код метода realise, и идет завершение. Два теста из трех работают. Все используют один и тот же виджет. И в тестах отличий по минимуму. Достаточно в неработающий тест добавить при создании виджета определение ресурса, например, изменить размер рамки, и тест отрабатывает.

Поэкспериментировал со старыми тестами. Добился, что один тест тоже стал вываливаться с аналогичной ошибкой, если в нем сократить все действия до минимума. То есть создаем виджет в топлевеле и ничего более. Хотя все это может не означать какой-либо закономерности. Просто какое-то стечение непонятных условий. Все это приводит меня в полное замешательство.

Тогда я взял и написал для сборки всего этого простой makefile. С ним все собирается и работает. Кинул собранную библиотеку в проект с autotools. Пересобрал тесты. Все тесты работают.

Что делать непонятно. Даже не знаю, что еще проверить, или поковырять. Что посоветуете?

Методом научного тыка нашел, как победить проблему. Правда до конца не понял, отчего получался такой эффект. В директивах AC_CHECK_LIB надо было самому отрабатывать результат. А без этого автоматом линкеру при сборке библиотеки передавались в аргументах имена других библиотек. В результате в библиотеку добавлялись какие-то дополнительные символы. И с такой библиотекой возникали описанные глюки. Что там эти символы портили, да еще так избирательно случайным образом, не представляю. Хотелось бы конечно понять, в чем же там суть. Может кто посоветует, что почитать как устроены всякие линкеры и загрузчики?

zloy_starper ★★★
() автор топика