使用Lazarus在树莓上构建共享库
我正在尝试构建共享库,以便在使用拉撒路的覆盆子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)任何建议,我可以尝试使它工作,编译它不同或做更多的诊断?
找到解决方案。正如Marco提出的:将initc添加到uses部分。看起来,如果你尝试创建一个库,它必须在使用部分包含initc,cmem或者LCL,因为库需要做一些内存管理,为此它需要其中一个单元。
"Undefined symbol: TC_SYSTEM_ISLIBRARY"
这似乎是一个覆盆子特定的问题,在其他系统上的编译器不给这个错误:
但是这个尝试加载库时导致另一个错误。更多信息可以在HERE找到。
最终通过在树莓派上安装fpc 3.0.0编译器解决了这个问题,编译它并且库可以正确加载(但仍然需要上述单元之一)。
FPC 2.6.4 for arm仅适用于softfloat目标。硬件加速raspbians是第三方backports。他们并不坏,但迁移到3.0.0(或3.0.2rc1和我希望很快3.0.2)是建议 –
如果你做LD_LIBRARY_PATH =。,那么会发生什么?或者尝试将单元“initc”导入到库中。 –
尝试了两个,确实initc解决了它,但导致了另一个问题。然而找到了一个解决方案,我将发布。不管怎么说,还是要谢谢你! – Steven