2011-08-03 9 views
3

本当に古いソースコード(Red Hatでコンパイルされています)で作業しています。 lua-4.0.1がリリースされる前は、最新のlua(lua-5.1.4)をコンパイルして、古いものと同じディレクトリにインストールしました。実装はそれほど大きくないので、いくつかの関数名を除いて変更する必要はあまりなく、コンパイルするためには "lauxlib.h"をインクルードする必要がありました。これは問題なくコンパイルされますが、これらのリンクエラーが発生します。lua 4.0.1から5.1.4へのアップグレード時にリンクエラーが発生する

/usr/local/lib/liblua.a(loadlib.o): In function `ll_load': 
loadlib.o(.text+0x19): undefined reference to `dlopen' 
loadlib.o(.text+0x2a): undefined reference to `dlerror' 
/usr/local/lib/liblua.a(loadlib.o): In function `ll_sym': 
loadlib.o(.text+0x52): undefined reference to `dlsym' 
loadlib.o(.text+0x63): undefined reference to `dlerror' 
/usr/local/lib/liblua.a(loadlib.o): In function `ll_unloadlib': 
loadlib.o(.text+0x8): undefined reference to `dlclose' 

基本的にすべてのパスは正しいですが、私は古いものと同じフラグをコンパイラに使用します。私はmakefileを全く変更しません。

-static -lpthread -lnsl -lutil -ldl -lmysqlclient -llua -llualib -lz -lcppunit 

ldlフラグはすでに存在します。

私は試してみることを知りたいだけです。すべてが評価されます。これは私を狂ってしまう。

答えて

5

-ldlは、linerコマンドの最後に配置します。順序は重要です。

リンカーは、コマンドラインでより右に立っているlibs内の参照されていないシンボルを満たすライブラリを検索します。新しいliblua.aは現在dlopenと友だちを使用しますが、古いものは使用しませんでした。 -ldl-lluaのままなので、リンカーはlua参照をリンクするためにlibdlを使用しません。

関連する問題