2017-01-04 15 views
0

Я пытаюсь создать общую библиотеку для использования на малине pi (модель 3B) с использованием lazarus. После некоторого озадачивания я узнал, что моя оригинальная библиотека не работает должным образом, поэтому я переключился на очень простую библиотеку, используя пример this.Создайте общую библиотеку на малине, используя Lazarus

Но даже эта простая библиотека неправильно компилируется для использования. Когда я пытаюсь открыть библиотеку в другом Лазаря проекте он дает мне ошибку:

<libName>: cannot open shared object file: No such file or directory 

После некоторых исследований я обнаружил следующую диагностику я мог бежать. Командный файл и LDD в библиотеке компиляции:

$ Файл ./libname.so дает:

./libname.so: ELF 32-bit LSB shared object, ARM, EABI5 verion 1 (SYSV), dynamically linked, not stripped 

$ LDD ./libname.so

not a dynamic executable 

Я искал для подобных случаев и выяснилось, что у других была эта проблема, когда они пытались использовать библиотеки для компиляции для другой платформы/архитектуры. Я уже установил проект> параметры проекта> параметры компилятора> целевую платформу для ОС: = linux и Target CPU family: arm.

Система Я использую (используя $ uname -a):

Linux raspberrypi 4.4.13-V7+ #894 SMP Mon Jun 13 13:13:27 BST 2016 armv7l GNU/Linux 

с дистрибутивом: Raspbian GNU/Linux 8.0 (Jessie)

Lazarus Версия: 1.2.4 + dfsg2-1 Версия FPC: 2.6.4 arm-linux-gtk2

На данный момент я не уверен, что не так, и почему эта библиотека не работает. Я могу найти очень мало информации об этой проблеме (на платформе aspberry и использовании lazarus) Любые предложения, что я мог бы попытаться заставить ее работать, скомпилировать ее или сделать еще несколько диагностических программ?

+0

И если вы делаете LD_LIBRARY_PATH =., Что тогда происходит? Или попробуйте импортировать блок «initc» в вашу библиотеку. –

+0

Пробовал оба, действительно, initc решил его, но привел к другой проблеме. Однако нашел решение, которое я опубликую. Спасибо, в любом случае! – Steven

ответ

2

Обнаружено решение. Как предложил Марко выше: добавьте initc в часть использования. Похоже, что если вы попытаетесь создать библиотеку, она должна включить initc, cmem или LCL в раздел uses, потому что библиотека должна выполнить некоторое управление памятью, для которой ему нужен один из этих устройств.

Однако это привело к другой ошибке при попытке загрузить библиотеку:

"Undefined symbol: TC_SYSTEM_ISLIBRARY" 

Это, кажется, малину конкретной проблемы, компиляторы на других системах не дают эту ошибку. Более подробную информацию можно найти HERE.

В конечном итоге это удалось решить, установив компилятор fpc 3.0.0 на малиновый pi, скомпилировав его, и библиотека может быть загружена должным образом (но все еще нуждается в одном из вышеуказанных устройств).

+1

FPC 2.6.4 для оружия предназначен только для целей softfloat. Аппаратные ускоренные raspbians являются сторонними backports. Они были неплохими, но переход на 3.0.0 (или 3.0.2rc1 и вскоре 3.0.2, я надеюсь) должен быть рекомендован –

 Смежные вопросы

  • Нет связанных вопросов^_^