Как мой .so может найти свой зависимый .so в другой версии Ubuntu? - PullRequest
1 голос
/ 15 июля 2010

У меня есть один libA.so.Он используется методом JNI.

И у меня есть две разные версии Ubuntu.Одним из них является Ubuntu 8.04, а другим - Ubuntu 9.10.

libA.so имеет зависимость.libA.so зависит от libB.so, а libB.so зависит от libC.so.

т.е.libA.so -> libB.so -> libC.so (На самом деле libB.so и libC.so связаны с GTK)

libA.so скомпилирован в Ubuntu 8.04.И метод JNI отлично работает в Ubuntu 9.10.(очень странно)

Но иногда это не работает в Ubuntu 8.04.Он возвращает ошибку «неопределенный символ GTK_SET_BULA».

Поэтому я проверил его, используя readelf -a libC.so, и смог найти символ.

Я проверил его, используя ldd libA.so и ldd libB.so.Информация о ссылке тоже подойдет.

Я имею представление об этой проблеме.Пожалуйста, дайте мне знать ваше отличное мнение.Спасибо.

1 Ответ

0 голосов
/ 11 января 2011

Укажите больше информации по вашему вопросу:

  1. точное имя неопределенного символа
  2. точное название библиотек A, B, C,
  3. точное имя метода JNI, который вы вызываете,
  4. несколько слов о работе приложения.

Общая рекомендация для решения таких проблем - поиск информации о пропущенном символе в LSB Navigator .

КСТАТИ
Используйте параметр -Wa для чтения файлов ELF вместо -a, чтобы избежать разбиения выходных строк (на 80 столбцов):

readelf -Wa libC.so
...