2017-01-04 76 views
0

我正在嘗試構建共享庫,以便在使用拉撒路的覆盆子pi(模型3B)上使用。經過一番困惑之後,我發現我原來的圖書館工作不正常,於是我轉向使用this例子的一個非常簡單的圖書館。使用Lazarus在樹莓上構建共享庫

但即使這個簡單的庫不能正確編譯使用。當我嘗試在其他Lazarus計劃打開庫它給我的錯誤:

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

一些研究,我發現下面的診斷,我可以跑後。我已經尋找類似案件

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

$ LDD ./libname.so

not a dynamic executable 

:在編譯庫中的文件和LDD命令:

$文件./libname.so給並發現其他人在嘗試使用不同的平臺/體系結構編譯庫時遇到了這個問題。我已經將項目>項目選項>編譯器選項>目標平臺設置爲OS:= linux和Target CPU系列: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(傑西)

拉撒路版本:1.2.4 + dfsg2-1 FPC版本:2.6.4 arm-linux-gtk2

在這一點上,我不知道什麼是錯的,爲什麼這個庫不工作。我可以找到關於這個問題的很少的信息(在aspberry平臺上,並使用lazarus)任何建議,我可以嘗試使它工作,編譯它不同或做更多的診斷?

+0

如果你做LD_LIBRARY_PATH =。,那麼會發生什麼?或者嘗試將單元「initc」導入到庫中。 –

+0

嘗試了兩個,確實initc解決了它,但導致了另一個問題。然而找到了一個解決方案,我將發佈。不管怎麼說,還是要謝謝你! – Steven

回答

2

找到解決方案。正如Marco提出的:將initc添加到uses部分。看起來,如果你嘗試創建一個庫,它必須在使用部分包含initc,cmem或者LCL,因爲庫需要做一些內存管理,爲此它需要其中一個單元。

"Undefined symbol: TC_SYSTEM_ISLIBRARY" 

這似乎是一個覆盆子特定的問題,在其他系統上的編譯器不給這個錯誤:

但是這個嘗試加載庫時導致另一個錯誤。更多信息可以在HERE找到。

最終通過在樹莓派上安裝fpc 3.0.0編譯器解決了這個問題,編譯它並且庫可以正確加載(但仍然需要上述單元之一)。

+1

FPC 2.6.4 for arm僅適用於softfloat目標。硬件加速raspbians是第三方backports。他們並不壞,但遷移到3.0.0(或3.0.2rc1和我希望很快3.0.2)是建議 –