2011-01-25 4 views
1

のLuaのクロスコンパイル、テストモジュール、および現実のモジュールはOK行きましたが、私はuClinuxを実行しているアプライアンス上で現実のモジュールをロードしたときに、私はこのエラーを取得する:"シンボルを解決できません"という考えられる原因はありますか?

appliance::/var/tmp> ./lua -l dummy 
Hello from dummy 
Bye from dummy 
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio 

appliance::/var/tmp> ./lua -l luasql.sqlite3 
./lua: can't resolve symbol '_luaL_ref' 

私はGoogleが共有ライブラリの問題を指摘しているように見えるが、原因が何であるかを知るには十分な経験がない。たぶんモジュールにはライブラリの一部、またはライブラリの特定のバージョンが必要なのでしょうか?

誰かがこのタイプのエラーを以前に見たことがありますか?どのように私は調査することができますか?

ありがとうございます。


編集:ここで私はSQLite3のためのLua、SQLite3の、およびLuaSQLを構築するために使用されるのconfig/Makefileには、以下のとおりです。

# cat /var/tmp/lua-5.1.4/src/Makefile 
MYCFLAGS= 
MYLDFLAGS= 
MYLIBS= 

export PATH:=$(PATH):/usr/src/baps/opt/uClinux/bfin-linux-uclibc/bin 

TARGET_CROSS=bfin-linux-uclibc- 
export CC=$(TARGET_CROSS)gcc 
export STRIP=$(TARGET_CROSS)strip 
export AR=$(TARGET_CROSS)ar rcu 
export RANLIB=$(TARGET_CROSS)ranlib 
export STAGING_DIR=/usr/src/baps/uClinux-dist/staging 
export UCLINUX_LIB=/usr/src/baps/uClinux-dist/lib 
export UCLINUX_ROOT_LIB=/usr/src/baps/uClinux-dist/root/lib 
export CFLAGS=-O2 -Wall -Wmissing-prototypes -Wmissing-declarations -I$(STAGING_DIR)/usr/include -DLUA_USE_POSIX -DLUA_USE_DLOPEN 
export LDFLAGS= -L$(STAGING_DIR)/usr/lib -L$(UCLINUX_LIB) -L$(UCLINUX_ROOT_LIB) -ldl -lm 

... 
$(LUA_T): $(LUA_O) $(LUA_A) 
     $(CC) -o [email protected] $(CFLAGS) $(LDFLAGS) $(LUA_O) $(LUA_A) 

$(LUAC_T): $(LUAC_O) $(LUA_A) 
     $(CC) -o [email protected] $(CFLAGS) $(LDFLAGS) $(LUAC_O) $(LUA_A) 
... 
generic: 
     $(MAKE) all 

# cat /var/tmp/sqlite-amalgamation-3070400/Makefile 
export PATH:=$(PATH):/usr/src/baps/opt/uClinux/bfin-linux-uclibc/bin 

TARGET_CROSS=bfin-linux-uclibc- 
export CC=$(TARGET_CROSS)gcc 
export STRIP=$(TARGET_CROSS)strip 
export AR=$(TARGET_CROSS)ar rcu 
export RANLIB=$(TARGET_CROSS)ranlib 
export CFLAGS=-O2 -Wall 

libsqlite3.o: 
     $(CC) $(CFLAGS) -DSQLITE_THREADSAFE=0 -o [email protected] -c sqlite3.c 

# cat /var/tmp/luasql-2.1.1/config 
... 
LUA_INC= /var/tmp/lua-5.1.4/src 
LIB_OPTION= -shared #for Linux 
... 
DRIVER_LIBS= /var/tmp/sqlite-amalgamation-3070400/libsqlite3.o 
DRIVER_INCS= -I/var/tmp/sqlite-amalgamation-3070400 

WARN= -Wall 
INCS= -I$(LUA_INC) 
CFLAGS= -O2 $(WARN) -I$(COMPAT_DIR) $(DRIVER_INCS) $(INCS) $(DEFS) 
CC=/usr/src/baps/opt/uClinux/bfin-linux-uclibc/bin/bfin-linux-uclibc-gcc 
LDFLAGS = -Wl,--trace,--print-map,--cref 

# cat /var/tmp/luasql-2.1.1/Makefile 
... 
src/$(LIBNAME): $(OBJS) 
     $(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] $(OBJS) $(DRIVER_LIBS) $(LIB_OPTION) 

編集:言われた後、それは最も可能性の高いだったことLuaをビルドするときには、以下のオプションが必要です: "-Wl、-E"

+1

は役立つだろう。 –

+0

申し訳ありません。私は元の投稿を編集しました。 – Gulbahar

答えて

2

私はluaの経験がありませんが、しかし一般的に私は言うことができるシンボルが「未解決」である場合、リンカーはリンクするように指示されたアーカイブファイルまたはライブラリのいずれにもシンボルを見つけることができないことを示します。どのライブラリがシンボルを定義しているかを特定し、linkコマンドに含める必要があります。通常は-lフラグです。また、このライブラリを含むディレクトリを与える-Lフラグを提供する必要があります。 Makefileでは、これらのフラグをLDFLAGS変数に追加することができます。

+0

チップをありがとう。インタプリタとライブラリを正常にコンパイルしてリンクすることができたので、アプライアンス上で2つの項目を実行すると、そのエラーメッセージの原因がわかりません。私は何かを見つけることができるかどうかを調べるためにリンカーの部分を調べます。 – Gulbahar

2

上記の回答に加えて、アプライアンスで実行している場合は、ビルドシステムのインクルードまたはライブラリとリンクしていないことを確認する必要があります。あなたの開発システムの$ PATH変数は、ローカルインクルードファイルとlibsを指しているかもしれません。さらに、libがアプライアンス内の使用可能な場所(通常は/ binまたは/ lib)にあることを確認する必要があります。

2

「open64」というシンボルを解決できない、または「setrlimit64」というシンボルを解決できないなどのエラーが発生した場合は、大きなファイルをサポートするアプリケーションを使用している可能性があります。それをサポートしません。 __USE_FILE_OFFSET64マクロに注意してください。

0

は、この行を削除してみてください:あなたは、クロスコンパイル環境用のモジュールとのLuaをコンパイルとリンクされている方法のためのコマンドラインを提供

export STRIP=$(TARGET_CROSS)strip 
関連する問題