使用Lua链接动态库.so时出现错误。

问题背景:

  • 操作系统:Linux Ubuntu

  • 编译器:gcc

  • 语言:C++

  • 两个项目:

    • 项目1:使用Lua构建动态库(libBattleCore.so)

    • 项目2:使用项目1生成的libBattleCore.so构建控制台应用程序

问题描述

项目2的编译命令:

g++ -Wall -fexceptions -O2 -o bin/Release/BattleConsole  libBattleCore.h main.cpp -I/home/Downloads/lua-5.2.3/install/include/ -L. -lBattleCore

错误信息

./libBattleCore.so: undefined reference to `luaopen_table'
./libBattleCore.so: undefined reference to `lua_getfield'
./libBattleCore.so: undefined reference to `lua_isstring'
...
./libBattleCore.so: undefined reference to `lua_tolstring'
collect2: error: ld returned 1 exit status

问题是什么,有什么解决方法?谢谢

附加信息

项目1的构建命令:

g++ -O2 -fPIC -shared -o bin/Release/libBattleCore.so -I/home/Downloads/lua-5.2.3/install/include/ -L/home/Downloads/lua-5.2.3/install/lib/ -llua Basic_Battle/Arsenal.cpp Basic_Battle/BaseEntity.cpp  ...(lots of cpp files)

ldd libBattleCore.so:

linux-vdso.so.1 =>  (0x00007ffff7ffe000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f008f35a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f008f054000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f008ee3d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f008ea77000)
/lib64/ld-linux-x86-64.so.2 (0x00007f00946a8000)
点赞
用户2701808
用户2701808

问题解决了...

还是用 Lua 编译项目 2...

编译命令:

g++ -Wall -fexceptions -O2 -o bin/Release/BattleConsole  libBattleCore.h main.cpp -L. -lBattleCore -llua -ldl

动态库 (.so) 应该复制到 /usr/lib/ 中 那么 ldd BattleCosnole 将列出 libBattleCore.so => /usr/ ... 而不是再次显示“未找到”

我仍然想要其他方法来自定义 .so 的路径

谢谢

2014-07-31 11:44:48