gpt4 book ai didi

lua - 无法链接最小的 Lua 程序

转载 作者:行者123 更新时间:2023-12-04 17:40:53 25 4
gpt4 key购买 nike

我有以下简单的 Lua 程序,它是从 Programming In Lua 中复制的

#include <stdio.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
int main (void)
{
char buff[256];
int error;
lua_State *L = luaL_newstate(); /* opens Lua */
luaL_openlibs(L); /* opens the standard libraries */
while (fgets(buff, sizeof(buff), stdin) != NULL)
{
error = luaL_loadbuffer(L, buff, strlen(buff), "line") ||
lua_pcall(L, 0, 0, 0);

if (error)
{
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1); /* pop error message from the stack */
}
}
lua_close(L);
return 0;
}

我的环境是cywin

我的 make 文件如下所示:
CC=gcc
INCLUDE='-I/home/xyz/c_drive/Program Files/Lua/5.1/include'
LINKFLAGS='-L/home/xyz/c_drive/Program Files/Lua/5.1/lib' -llua51

li.o:li.c
$(CC) $(INCLUDE) -c li.c

main:li.o
$(CC) -o main $(LINKFLAGS) li.o

clean:
rm *.o
rm main

我的/home/xyz/c_drive/Program Files/Lua/5.1/lib 目录包含 lua5.1.dll lua5.1.lib lua51.dll 和 lua51.lib

尝试构建我的主要目标时出现以下错误:
li.o:li.c:(.text+0x35): undefined reference to `_luaL_newstate'
li.o:li.c:(.text+0x49): undefined reference to `_luaL_openlibs'
li.o:li.c:(.text+0xaf): undefined reference to `_luaL_loadbuffer'
li.o:li.c:(.text+0xd9): undefined reference to `_lua_pcall'
li.o:li.c:(.text+0x120): undefined reference to `_lua_tolstring'
li.o:li.c:(.text+0x154): undefined reference to `_lua_settop'
li.o:li.c:(.text+0x167): undefined reference to `_lua_close'

关于我在这里可能做错的任何想法?

最佳答案

问题是您在需要它们的目标文件之前在链接命令行上命名了库。链接器在命令行上从左到右加载模块。在您命名 -llua51 的行上的点,不知道该库可以满足的 undefined symbol 。然后你命名 li.o ,它确实有未知的符号。

一些类 Unix 环境不会将此视为错误,因为在引用 .so 时,部分链接过程会延迟到程序加载。文件很满意。但是 Cygwin、MinGW 和 Windows 通常必须将此视为错误,因为 DLL 的工作方式与 .so 完全不同。文件。

解决办法是把 -llua51毕竟.o链接行上的文件。

编辑:顺便说一句,您似乎正在链接 Lua for Windows 发行版,但在 Cygwin 下使用 GCC 构建。您将需要使用 Dependency Walker确保您的程序不依赖于 Cygwin 运行时,并且它确实依赖于与 Lua for Windows 中的 lua51.dll 相同的 C 运行时。 IIRC,这将是以前版本的 Visual Studio 的运行时。可以对此进行 GCC 链接,但您需要使用 MinGW 端口(您可以从 Cygwin 使用),并链接到几个特定的​​库以获得该版本。我远离我常用的 PC,或者我会引用一个确切的链接行。 (我相信您需要 -lmoldname -lmsvcr80 或类似的东西,作为链接行的最后一项。)

如果使用了多个 C 运行时库,则会导致神秘且难以诊断的问题。简单的答案是使用与您首选的 Lua DLL 相同的一个。另一种选择是 Lua Binaries project为 Windows 上的各种 C 工具链预编译了 Lua DLL。如果您需要一个了解 Cygwin 环境的 Lua 应用程序,您将需要一个由 GCC 为 Cygwin 而不是 Windows 风格的 Lua 构建的应用程序。 Lua Binaries 将成为您的 friend ,或者您可以从源代码构建您自己的 Lua。

关于lua - 无法链接最小的 Lua 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4150081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com