./lua -l dummy Hello -6ren">
gpt4 book ai didi

linux - "Can' t解析符号的可能原因”?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:27 33 4
gpt4 key购买 nike

Lua、测试模块和实际模块的交叉编译正常,但是当我在运行 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'

我没有足够的经验知道原因是什么,尽管谷歌似乎指出了共享库的问题。也许模块需要某个库,或者某个特定版本的库,但它不存在?

有人以前见过这种类型的错误吗?我该如何调查?

谢谢。


编辑:这是我用来为 SQLite3 构建 Lua、SQLite3 和 LuaSQL 的配置/生成文件:

# 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 $@ $(CFLAGS) $(LDFLAGS) $(LUA_O) $(LUA_A)

$(LUAC_T): $(LUAC_O) $(LUA_A)
$(CC) -o $@ $(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 $@ -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 $@ $(OBJS) $(DRIVER_LIBS) $(LIB_OPTION)

编辑:在被告知这很可能是一个链接问题之后,经过更多的阅读和反复试验,我终于找到了它是什么:构建 Lua 时,需要以下选项:“-Wl,-E”

最佳答案

我对 lua 没有任何经验,但一般来说,当一个符号“未解析”时,这表明链接器无法在它被告知的任何存档文件或库中找到该符号链接(symbolic link)在一起。您将需要确定哪个库定义了符号并将其包含在链接命令中,通常带有 -l 标志。您可能还需要提供一个 -L 标志,给出包含该库的目录。在您的 Makefile 中,您可以将这些标志添加到 LDFLAGS 变量中。

关于linux - "Can' t解析符号的可能原因”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794228/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com