Raspberry pi 使用Lazarus在树莓上构建共享库

Raspberry pi 使用Lazarus在树莓上构建共享库,raspberry-pi,shared-libraries,lazarus,freepascal,Raspberry Pi,Shared Libraries,Lazarus,Freepascal,我正在尝试构建一个共享库,使用lazarus在raspberry pi(型号3B)上使用。经过一些困惑之后,我发现我原来的库不能正常工作,所以我使用示例切换到一个非常简单的库 但即使是这个简单的库也不能正确编译以供使用。当我试图在另一个lazarus项目中打开库时,它会给我一个错误: < libName >: cannot open shared object file: No such file or directory $ldd./libname.so not a dyna

我正在尝试构建一个共享库,使用lazarus在raspberry pi(型号3B)上使用。经过一些困惑之后,我发现我原来的库不能正常工作,所以我使用示例切换到一个非常简单的库

但即使是这个简单的库也不能正确编译以供使用。当我试图在另一个lazarus项目中打开库时,它会给我一个错误:

 < libName >: cannot open shared object file: No such file or directory 
$ldd./libname.so

not a dynamic executable
我搜索过类似的案例,发现其他人在尝试使用为不同平台/架构编译的库时遇到了这个问题。我已经将项目>项目选项>编译器选项>目标平台设置为OS:=linux和目标CPU系列:arm

我正在使用的系统(使用$uname-a):

发行版:Raspbian GNU/linux 8.0(jessie)

Lazarus版本:1.2.4+dfsg2-1 FPC版本:2.6.4 arm-linux-gtk2


在这一点上,我不知道什么是错的,为什么这个库不工作。关于这个问题,我几乎找不到什么信息(在aspberry平台上,使用lazarus),有什么建议我可以尝试让它工作,编译它,或者做更多的诊断吗?

找到了解决方案。正如Marco在上面提出的:将initc添加到uses部分。看起来,如果您试图创建一个库,它必须在uses部分包含initc、cmem或LCL,因为库必须进行一些内存管理,它需要这些单元中的一个

但是,在尝试加载库时,这会导致另一个错误:

"Undefined symbol: TC_SYSTEM_ISLIBRARY"
这似乎是一个特定于覆盆子的问题,其他系统上的编译器不会给出此错误。可以找到更多信息


最终通过在raspberry pi上安装fpc 3.0.0编译器解决了这个问题,编译后库可以正确加载(但仍然需要上述单元之一)

找到了解决办法。正如Marco在上面提出的:将initc添加到uses部分。看起来,如果您试图创建一个库,它必须在uses部分包含initc、cmem或LCL,因为库必须进行一些内存管理,它需要这些单元中的一个

但是,在尝试加载库时,这会导致另一个错误:

"Undefined symbol: TC_SYSTEM_ISLIBRARY"
这似乎是一个特定于覆盆子的问题,其他系统上的编译器不会给出此错误。可以找到更多信息


最终通过在raspberry pi上安装fpc 3.0.0编译器解决了这个问题,编译后库可以正确加载(但仍然需要上述单元之一)

如果您使用LD_LIBRARY_PATH=,那么会发生什么?或者尝试将单元“initc”导入到您的库中。尝试了两者,initc确实解决了它,但导致了另一个问题。然而,我找到了一个解决方案,我将发布。无论如何谢谢你!如果您使用LD_LIBRARY_PATH=,那么会发生什么?或者尝试将单元“initc”导入到您的库中。尝试了两者,initc确实解决了它,但导致了另一个问题。然而,我找到了一个解决方案,我将发布。无论如何谢谢你!arm的FPC 2.6.4仅适用于软浮动目标。硬件加速Raspbian是第三方后端端口。它们还不错,但迁移到3.0.0(或3.0.2rc1,我希望很快会迁移到3.0.2)是建议的。因为arm仅用于软浮点目标。硬件加速Raspbian是第三方后端端口。它们还不错,但迁移到3.0.0(或3.0.2rc1,我希望很快会迁移到3.0.2)是值得建议的
"Undefined symbol: TC_SYSTEM_ISLIBRARY"