CentOSでアスタリスクの後に./configure
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
が、上記と同じエラーが発生しました。
答え1
この時点で、Astarisk では動的ライブラリを構築しようとしています。この動的ライブラリは任意のメモリ位置にロードできるため、すべてが再配置可能である必要があります。フラグは-fPIC
位置独立コードを意味し、コードはロード位置に依存しないように作成され、どこにでもロードされます。
このアスタリスクの動的ライブラリビルドの一部として、Luaインタープリターを導入しようとしています。動的ライブラリを導入するため、PICでコンパイルされたすべてのものが必要です。しかし、Luaの静的ライブラリを使用しています。ない-fPIC でビルドされています。静的ライブラリ内の lua オブジェクトは再配置できないため、これは拒否されます。
ところで:これが、-fPIC
アスタリスク ビルドに追加しても役に立たない理由です。互換性がないのは、アスタリスク コード オブジェクト (-fPIC が影響する可能性があります) ではなく、liblua.a、具体的には liblua.a によって運ばれるオブジェクト (例: lapi.o) です。さらに、その時点では動的ライブラリをビルドしており、その時点でまとめようとしているアスタリスク オブジェクトに対して、-fPIC などの再配置可能なコード フラグが既にあることは確かです。
解決策は3つあります。
1 つは、ビルドから lua を削除することです。特に必要ではなく、「後で試してみると楽しいかもしれない」と考えている場合は、必要な機能を失わずに削除できる可能性があります。
もう 1 つは、Asterisk ビルドで参照できる liblua の動的バージョンを取得することです
liblua.so
。お使いのディストリビューションがわからないため、取得方法はわかりません。もう 1 つの、より面倒な方法は、-fPIC を使用して lua と liblua.a を再構築することです。ビルド フラグ (作成したものとディスク上にあるその他のもの) の不一致により互換性の問題が発生する可能性があります。そのため、現在ビルドされている lua と一致する liblua.so を見つける方がよいオプションだと思います。
liblua.so を見つけた場合は、'-rpath' リンカー フラグ、具体的には '-Wl,-rpath,/path/to/lua/libs' を調べることをお勧めします。