Buildroot добавление пользовательских библиотек, происходящих из FPC - PullRequest
0 голосов
/ 25 июня 2018

У меня есть проект buildroot, в который я хочу добавить библиотеку, скомпилированную с помощью pascal.Причиной этого является то, что это пользовательская библиотека, и перенос ее на C в данный момент слишком сложен.Я собираю его для Raspberry Pi CM3.Как это работает в настоящее время:

  1. Я скомпилировал библиотеку libcustom.so на raspberry pi (raspbian).
  2. В buildroot я загружаю библиотеку из репозитория git.

Теперь у меня проблема в том, что программа, которая использовала эту библиотеку, не может найти библиотеку (хотя она находится в папке / usr / lib /).Используя команду ldd, я получил следующий вывод:

$ ldd /usr/lib/libcustom.so
checking sub-depends for 'not found'
checking sub-depends for 'not found'
checking sub-depends for 'not found'
    ld-linux-armhf.so.3 => not found (0x00000000)
    libdl.so.2 => not found (0x00000000)
    libc.so.6 => not found (0x00000000)
    not a dynamic executable

Проверка выходных данных, полученных той же командой в системе, в которой я скомпилировал библиотеку, помогла мне определить, какие суб-зависимости отсутствовали.Поскольку архитектура обеих систем одинакова, я решил, что для проверки того, чего не хватает, я мог бы просто скопировать библиотеки из системы компиляции в систему buildroot.(отсутствующие библиотеки были libc.so.6, libdl.so.2 и lib-linux-armhf.so.3).Теперь ldd дает мне следующее:

$ ldd /usr/lib/libcustom.so
checking sub-depends for '/lib/ld-linux-armhf.so.3'
checking sub-depends for '/usr/lib/libdl.so.2'
checking sub-depends for '/usr/lib/libc.so.6'
    /lib/ld-linux-armhf.so.3 (0x76fc2000)
    linux-vdso.so.1 (0x7ef00000)
checking sub-depends for '/usr/lib/libc.so.6'
    /lib/ld-linux-armhf.so.3 (0x76ee8000)
    linux-vdso.so.1 (0x7efeb000)
    /lib/ld-linux-armhf.so.3 => /lib/ld-linux-armhf.so.3 (0x00000000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00000000)
    /lib/ld-linux-armhf.so.3 => /lib/ld-linux-armhf.so.3 (0x00000000)

Пользовательская библиотека все еще не работает (и ldd по-прежнему указывает на пустые (0x00000000) библиотеки.


Я былнемного поискать, однако есть еще две вещи , которые я не понимаю:

  1. Почему вышеприведенное решение не работает? Библиотеки имеют ту же архитектуру, но, как указывает ldd,выше, некоторые библиотеки все еще не могут быть правильно найдены.
  2. Как включить библиотеки в buildroot? Я искал это и нашел, как добавить пользовательские пакеты, но я все еще не знаю, как добавить определенные библиотеки (такой как тот, который я добавил вручную).

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Вы не можете взять библиотеку, построенную на системе A (Raspbian), и автоматически ожидать, что эта библиотека будет работать на системе B (созданной с помощью Buildroot). Действительно, библиотека C может отличаться, а ABI может быть другим. Совместимость на двоичном уровне не тривиальна.

У вас есть два варианта:

  • Убедитесь, что конфигурация Buildroot соответствует libc / ABI, используемой в Raspbian. В вашем случае кажется, что создание инструментария glibc в Buildroot с помощью EABIhf ABI должно сработать.

  • Создайте свою библиотеку с помощью Buildroot. Для этого потребуется создать пакет для кросс-компилятора Pascal, а затем пакет для вашей библиотеки.

0 голосов
/ 25 июня 2018

Распределение обеих систем одинаковое?В противном случае попытайтесь построить библиотечный кросс с библиотеками из цели.

...