Lua 5.4.2嵌入式连接错误

我尝试在CLion IDE和CMake中使用嵌入式Lua,但我遇到了连接器错误。

运行此程序时,我得到了 undefined symbol: _luaL_newstate

#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"

int main()
{
    lua_State *L = luaL_newstate();
    return 0;
}

这是我的CMake文件,它使用CMake的内置FindLua.cmake查找包。我使用CMake选项 -DCMAKE_CXX_FLAGS="-Wall -Wextra" -DCMAKE_C_FLAGS="-Wall -Wextra"

编辑:CMake生成的链接器命令失败是 lld-link.exe /nologo @CMakeFiles\LuaProjk.dir\objects1.rsp /out:C:\Users\b\CLionProjects\LuaProjk\bin\LuaProjk.exe /implib:LuaProjk.lib /pdb:C:\Users\b\CLionProjects\LuaProjk\bin\LuaProjk.pdb /version:0.0 /machine:X86 /debug /INCREMENTAL /subsystem:console C:\Lua\lua54.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\LuaProjk.dir/intermediate.manifest CMakeFiles\LuaProjk.dir/manifest.res

cmake_minimum_required(VERSION 3.17)
project(LuaProjk C)

set(LUA_DIR /Lua)
set(LUA_INCLUDE_DIR /Lua/include)
find_package(Lua REQUIRED)
include_directories(${LUA_INCLUDE_DIR})

set(CMAKE_C_STANDARD 11)
set(SOURCE_FILES main.c)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../../bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../../lib)

add_executable(LuaProjk ${SOURCE_FILES})
target_link_libraries(LuaProjk ${LUA_LIBRARIES})

Lua目录包含lua54.dll和lua54.lib文件,以及包含所有头文件的include目录。

我失漏了些什么吗?感谢您的帮助!

点赞
用户11740758
用户11740758

你可以编译这个吗?...

(wait.c)

/* 这是 Lua 的 wait 函数
   它使用 unistd.h > usleep()
   所以 wait(1000000) 是一秒钟
*/
#include <unistd.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

static int wait_c(lua_State *L){
 long msecs=lua_tointeger(L,-1);
 usleep(msecs);
 return 0;
}

int wait(lua_State *L){
 lua_register(L,"wait",wait_c);
 return 0;
}

在 Linux 上,Makefile 看起来像这样:

all: wait.so

wait.so: wait.c
    gcc -shared -fPIC -o wait.so wait.c

clean:
    rm -v wait.so

...它可以以两种方式加载...

  1. require('wait')

    ...或者...

  2. package.loadlib('wait.so','wait')()

    ...so 文件是 Linux 库,你当然需要:*.dll

    (我没有在 Windows 上的 C IDE ?)

2021-04-15 20:28:59