@dimonkoz

Как решить проблемы линковки при кросскомпиляции под ARM, используя GN и Ninja?

Пытаемся сделать видеострим с помощью WebRTC. Источник видео AllWinner на ARM, который успешно стримит видео в H264 при использование Software-сжатия, но кушает много ресурсов. При попытке выполнить сжатие с помощью аппаратного кодека, возникают проблемы.
Есть готовые .so либы под AllWinner для работы с энкодером. При попытке засунуть их в файл Ninja, сборка под ARM на Ubunta проходит нормально. Но при запуске на AllWinner выпадает:
./peerconnection_client: symbol lookup error: /usr/local/lib/cedarx/libvencoder.so: undefined symbol: SecureMemAdapterOpen

Если выполнить nm -D ./libvencoder.so, то у SecureMemAdapterOpen метода есть пометка U. Сама SecureMemAdapterOpen находится в другой подключаемой libMemAdapter.so. Если вообще не указывать libMemAdapter.so как либу при сборке, то проект не собирается вовсе:
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'MemAdapterClose'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'MemAdapterGetPhysicAddress'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'MemAdapterGetPhysicAddressCpu'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'MemAdapterOpen'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'MemAdapterPalloc'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'SecureMemAdapterClose'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'MemAdapterGetVirtualAddress'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'MemAdapterPfree'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'SecureMemAdapterOpen'
/usr/local/lib/cedarx/libvencoder.so: error: undefined reference to 'MemAdapterFlushCache'

Вопрос 1. Если реализация SecureMemAdapterOpen не находится в libvencoder.so, то как ведет себя процесс сборки под ARM на Ubunta? Проверяется ли пути всех зависимостей, которые могут использоваться в share library?
Вопрос 2. Если возможно, то как добавить используемые .so либы прямо в GN файлы, чтобы он создал ninja файл для сборки (может мы что-то не учли вписывая зависимости в ninja вручную)?
  • Вопрос задан
  • 267 просмотров
Решения вопроса 1
@dimonkoz Автор вопроса
1. Проблема была решена путем добавления .h файла с прототипом хотя бы одной функции из .so. Линкер умудряется не захватывать библиотеку, если она используется не прямо из кода, а их другой .so
2. В GN напрямую .so добавить не удалось, но руками можно подписать в ninja-файл (аналог makefile) свойcтвом "solib"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы