後./configure
CentOSのアスタリスクmakeコマンドを入力しましたが、次のエラーが発生します
/usr/bin/ld: /usr/local/lib/liblua.a(lapi.o): relocation R_X86_64_32 against `luaO_nilobject_' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/liblua.a: could not read symbols: Bad value
私はこれを試しました./configure CFLAGS=-fPIC
しかし、上記と同じエラーが発生します。
アスタリスクのこの時点で、動的ライブラリを構築しようとしています。この動的ライブラリは任意のメモリ位置にロードできるため、すべてを再配置可能にする必要があります。 -fPIC
フラグは位置独立コードを意味し、コードはロード場所に依存しないように作成されます-どこにでもロードされます。
このアスタリスクの動的libビルドの一部として、Luaインタープリターを取り込もうとしています。動的ライブラリに組み込まれているため、コンパイルされたすべてのPICが必要です。しかし、あなたはluaの静的ライブラリを使用しています。これはnot-fPICでビルドされました。静的ライブラリ内のluaオブジェクトは再配置できないため、これは拒否されます。
BTW:これが、アスタリスクビルドに-fPIC
を追加しても効果がない理由です。互換性がないのはアスタリスクコードオブジェクトではなく(-fPICが影響を与える可能性があります)、liblua.a、特にliblua.aによって運ばれるオブジェクト(例:lapi.o)です。さらに、その時点で動的ライブラリを構築しているので、その時点でまとめようとしているアスタリスクオブジェクト用の-fPICなどの再配置可能なコードフラグがすでにあると確信しています。
3つの解決策があります。
1つは、ビルドからluaを削除することです。特にそれを必要とせず、「これは後で遊ぶのが楽しいかもしれない」ともっと考えていたなら、あなたは必要な機能を失うことなくできるかもしれません。
もう1つは、アスタリスクビルドで参照できるlibluaの動的バージョンliblua.so
を取得することです。あなたのディストリビューションがわからないので、入手方法がわかりません。
もう1つは、お尻の1つでさらに苦痛なのは、-fPICを使用してluaとliblua.aを再構築することです。一貫性のないビルドフラグ(作成したものとディスク上にあるもの)が原因で互換性の問題が発生する可能性があるため、現在ビルドされているluaと一致するliblua.soを見つける方が良いオプションだと思います。
Liblua.soを見つけた場合は、このための「-rpath」リンカーフラグ、具体的には「-Wl、-rpath、/ path/to/lua/libs」を調べることをお勧めします。