2017-01-04 7 views
0

私はlazarusを使ってラズベリーpi(モデル3B)で使う共有ライブラリを構築しようとしています。私の元のライブラリが正しく動作しなかったことが分かりましたので、私はthisの例を使って非常に単純なライブラリに切り替えました。ラザロを使ってラズベリーに共有ライブラリを構築する

しかし、この単純なライブラリでも、適切にコンパイルされずに使用されます。私は別のラザロプロジェクトにライブラリを開こうとすると、それは私にエラーを与える:

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

いくつかの研究の後、私は私が実行できる以下の診断を発見しました。コンパイルライブラリ内のファイルやlddコマンド:私は似たようなケースで検索しました

not a dynamic executable 

./libname.so

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

$の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が提案したように、uses部にinitcを追加します。ライブラリを作成しようとすると、initc、cmem、LCLをusesセクションにインクルードする必要があります。これは、ライブラリがこれらのユニットの1つを必要とするメモリ管理を行う必要があるからです。ライブラリをロードしようとしたとき

は、しかし、これは別のエラーが発生しました:

"Undefined symbol: TC_SYSTEM_ISLIBRARY" 

これは、ラズベリー、特定の問題のようです、他のシステムのコンパイラは、このエラーを与えることはありません。詳細はHEREを参照してください。

最終的にこれを解決するには、fpc 3.0.0コンパイラをラズベリーパイにインストールし、コンパイルしてライブラリを適切に読み込むことができます(しかし、上記のユニットの1つが必要です)。

+1

アーム用のFPC 2.6.4は、ソフトフローターゲット用です。ハードウェアアクセラレーションされたraspbiansはサードパーティのバックポートです。彼らは悪くないですが、3.0.0に移行する(3.0.2rc1とすぐに3.0.2を願っています) –

関連する問題