Вероятно, ваш компоновщик (или gcc) автоматически добавляет --as-needed
за кулисы, и в вашей системе XShapeCombineRectangles
поступает из некоторой библиотеки , отличной , чем libXext.
YouВы можете узнать, какая библиотека определяет символ XShapeCombineRectangles
в вашей ссылке: просто добавьте -Wl,-y,XShapeCombineRectangles
к вашей строке ссылки.
Добавление -v
покажет, используются ли какие-либо аргументы --as-needed
или нет.
Возможно, вы сможете заставить конечный исполняемый файл ссылаться на libXext
, добавив -Wl,--no-as-needed,-lXext
к строке ссылки.
Обновление : я неправильно понял вопрос (и высформулировал это очень плохо).
Чтобы переформулировать:
- приложение связывается и корректно работает в системе OPs, а
ldd<br>
app
показывает зависимость от libXext - приложение также правильно связывается и запускается в системе конечного пользователя, но
ldd app
показывает , а не показывает libXext - , когда приложение пытается
dlopen("de.so", ...)
в системе конечного пользователя.de.so: undefined symbol XShapeCombineRectangles
Если вышеуказанные пункты соответствуютт. е. вполне вероятно, что
- Система конечного пользователя имеет
libXext.a
, но не libXext.so
- Основное приложение не вызывает
XShapeCombineRectangles
, только код в de.so
делает - Когда
de.so
связан, нет -lXext
на его линии связи.
Либо установка libXext.so
, либо связываниеОсновное приложение с -u XShapeCombineRectangles
, скорее всего, решит проблему.
Чтобы понять проблему, вы можете прочитать this .
Я предполагаю, что XShapeCombineRectangles
не ссылается на основной исполняемый файл, следовательно, не извлекается из libXext.a
"книжной полки", следовательно, не экспортируется из основного исполняемого файла, несмотря на --export-dynamic
.