【问题标题】:Error while building 'luac' executable in RHEL6.6在 RHEL 6.6 中构建“lua”可执行文件时出错
【发布时间】:2015-11-27 18:46:15
【问题描述】:

我正在尝试在 Red Hat Enterprise Linux 6.6 平台上构建 lua-5.3.1。将构建以下二进制文件:

  1. 共享库:liblua.so
  2. 可执行文件:lua
  3. 可执行文件: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


【解决方案1】:

luac 必须与liblua.a 静态链接。

如果你真的想动态链接luac,试试这个:

  • lopcodes.clopcodes.h 中删除LUAI_DDEFLUAI_DDEC
  • lundump.h 中删除LUAI_FUNC
  • 重建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2018-11-21
    • 1970-01-01
    • 2013-08-22
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多