【发布时间】:2015-11-27 18:46:15
【问题描述】:
我正在尝试在 Red Hat Enterprise Linux 6.6 平台上构建 lua-5.3.1。将构建以下二进制文件:
- 共享库:liblua.so
- 可执行文件:lua
- 可执行文件:luac
我在提供的 Makefile 中做了以下更改:
现有的:
CC= gcc -std=gnu99
LUA_A= liblua.a
$(LUA_A): $(BASE_O)
$(AR) $@ $(BASE_O)
$(RANLIB) $@
修改:
CC= gcc -fPIC
LUA_A= liblua.so
$(LUA_A): $(BASE_O)
$(CC) -mthreads -shared -o $(LUA_A) $(BASE_O)
'liblua.so' 和 'lua' 已使用修改后的 Makefile 成功构建。但在 'luac' 构建期间,出现以下链接错误:
gcc -fPIC -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o luac.o luac.c
gcc -fPIC -o luac luac.o liblua.so -lm -Wl,-E -ldl -lreadline
luac.o: In function `PrintFunction':
luac.c:(.text+0x947): undefined reference to `luaP_opnames'
luac.c:(.text+0x963): undefined reference to `luaP_opmodes'
luac.o: In function `pmain':
luac.c:(.text+0x11db): undefined reference to `luaU_dump'
/usr/bin/ld: luac: hidden symbol `luaU_dump' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
make[1]: *** [luac] Error 1
make[1]: Leaving directory `/disk1/u10rhel66/lua-5.3.1/src'
make: *** [linux] Error 2
任何帮助将不胜感激。
【问题讨论】:
-
您可以尝试将
LUAI_FUNC设置为luaconf.h中的普通extern(但这会从共享库中导出许多私有符号),或者将luac与静态liblua.a链接为@lhf 建议。
标签: lua