print.c在Lua 5.2中缺失,尝试从源代码中构建。
2013-5-1 11:52:57
收藏:0
阅读:180
评论:1
我正在尝试从源代码构建 Lua,当我查看 http://www.lua.org/source/5.2/ 时,我基本上看到了源文件中的内容,但我没有看到print.c。
在我的build.bat文件中(我在Windows 7上做这个),我有这个:
cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c
del *.o
ren lua.obj lua.o
ren luac.obj luac.o
ren print.obj print.o
link /DLL /IMPLIB:lua5.2.lib /OUT:lua5.2.dll *.obj
link /OUT:lua.exe lua.o lua5.2.lib
lib /out:lua5.2-static.lib *.obj
link /OUT:luac.exe luac.o print.o lua5.2-static.lib
如果我只删除对print.o的所有引用,那么当我尝试将其嵌入我的游戏中时,我编译的东西会有问题吗?
在lua 5.1中,在编译器下,您将看到print.c,因此我想我不应该使用5.2。
http://www.lua.org/source/5.1/
更新
所以,我所做的是更改我的build.bat并删除print.obj,但我认为重命名对于不将lua.obj和luac.obj包含在.lib文件中是有用的,因此我将它们重命名,然后再将它们重命名回来。
cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c
del *.o
ren lua.obj lua.o
ren luac.obj luac.o
link /DLL /IMPLIB:lua5.2.lib /OUT:lua5.2.dll *.obj
link /OUT:lua.exe lua.o lua5.2.lib
lib /out:lua5.2-static.lib *.obj
ren lua.o lua.obj
ren luac.o luac.obj
link /OUT:luac.exe luac.obj lua5.2-static.lib
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
在Lua 5.2中,你不需要
print.c,它定义的唯一公共函数已经移动到了luac.c中。现在可以在luac.c中找到PrintFunction()函数。另外,在Windows中将
.obj重命名为.o并不是一个好主意。请使用您的工具链首选的任何对象文件名称。编辑:现在我看到了重命名的目的,尽管它确实能够工作,但我仍然认为这是一个不好的实践。
这样做的关键在于批处理文件中的
CL命令使用相同的选项编译当前目录中的每个.c文件。恰巧,这不是一个问题,但这不是做这类事情的常规方法。随后,因为其中一些文件实际上并不是要构建的DLL的一部分,所以重命名它们可以将其余的文件作为单个通配符
*.obj放入LINK命令行中。如果要使用批处理文件自己构建Lua,则最好在每个相关的链接行上列出构成DLL和每个应用程序的
.obj文件,而不是依靠通配符。如果CL命令出现构建错误,则构建DLL时仍将包含_所有其他_对象,或者更糟糕的是,可能使用未及时编译的对象构建了DLL。然后,即使出现错误,在建立最终的
lua.exe和luac.exe时,您也可能出现可以或可能无法成功链接的情况。正确的方法是使用某种形式的构建工具进行编译和链接。微软应该提供NMake,还可能会提供他们的内部工具BUILD(用于驱动Windows内核和设备驱动程序的构建,我知道它随DDK工具一起提供,但我认为它也在Platform SDK中,并且可能被深深地烧入VS中),并且还有添加更广泛使用的构建系统(例如GNU Make,CMAKE或无数其他)的选项。
如果您坚持使用重命名的技巧,因为现在它比学习正确的方法更快捷,请至少添加一些测试来检查每个编译和链接步骤的成功完成,例如
IF ERRORLEVEL 1 GOTO :EOF命令。如下所示,在失败后结束批处理文件。编辑批处理文件时,我注意到另一个潜在的问题。您使用
/DLUA_BUILD_AS_DLL编译了所有的OBJ文件,但随后制作了一个静态库并从中链接luac.exe。我不确定源代码的哪些特性会受到该定义的修改,但使用其编译的OBJ文件制作静态库而不是DLL可能不是明智的选择。cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c if ERRORLEVEL 1 goto :EOF del *.o ren lua.obj lua.o ren luac.obj luac.o link /DLL /IMPLIB:lua5.2.lib /OUT:lua5.2.dll *.obj if ERRORLEVEL 1 goto :EOF link /OUT:lua.exe lua.o lua5.2.lib if ERRORLEVEL 1 goto :EOF cl /MD /O2 /W3 /c *.c if ERRORLEVEL 1 goto :EOF del *.o ren lua.obj lua.o ren luac.obj luac.o lib /out:lua5.2-static.lib *.obj if ERRORLEVEL 1 goto :EOF ren lua.o lua.obj ren luac.o luac.obj link /OUT:luac.exe luac.obj lua5.2-static.lib if ERRORLEVEL 1 goto :EOF