C++ 使用Lua链接动态库时出错 问题背景:

C++ 使用Lua链接动态库时出错 问题背景:,c++,linux,gcc,lua,shared-libraries,C++,Linux,Gcc,Lua,Shared Libraries,操作系统:Linux Ubuntu 编译器:gcc 语言:C++ 2项目: 项目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

操作系统:Linux Ubuntu

  • 编译器:gcc

  • 语言:C++

  • 2项目:

    • 项目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
    
    g++ -Wall -fexceptions -O2 -o bin/Release/BattleConsole  libBattleCore.h main.cpp -L. -lBattleCore -llua -ldl
    
    错误消息

    ./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)
    
    问题解决了

    仍然使用lua编译项目2

    编译命令:

    g++ -Wall -fexceptions -O2 -o bin/Release/BattleConsole  libBattleCore.h main.cpp -I/home/Downloads/lua-5.2.3/install/include/ -L. -lBattleCore
    
    g++ -Wall -fexceptions -O2 -o bin/Release/BattleConsole  libBattleCore.h main.cpp -L. -lBattleCore -llua -ldl
    
    动态库(.so)应复制到/usr/lib/ 然后ldd BattleCosnole将列出libBattleCore.so=>/usr/。。。再也找不到了

    我仍然需要一些其他的方法来自我定义路径。所以


    谢谢

    ldd libBattleCore的功能是什么。那么输出呢?我已经编辑了这个问题。似乎libBattleCore.so没有包含lua中的任何内容,那么如何将lua嵌入其中?它缺少lua的so,添加
    -llua
    ,然后查看它是否正确project 1 building命令中已经有-llua。。。当在Project 2 building命令中添加-llua时,会出现相同的错误消息,您不需要在
    /usr/lib
    中使用liblua,您只需要将它放在您用
    -L
    告诉编译器/链接器的路径中即可。也就是说,是的,您需要将lua链接到使用它的东西(通常是二进制文件),尽管从自包含的库链接它也可以。