• 周日. 6月 26th, 2022

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

Lua 编译 GCC Linux Windows

admin

11月 28, 2021

之前是什么类似LuaRocks的工具集成生成了。

对照如下include文件夹,不同版本中.h文件相同,.hpp不同。
文件夹..lua-5.3.4_Sourcesincludelua-5.3.4_Win32_dll15_liblua-5.3.4_Win32_mingw6_liblua53include
文件luaconf.hlua.hlauxlib.hlualib.h

srlua-102Makefile使用(唯一的)make Linux build
使用lua-5.3.4_Sources对应的liblua.a,报错x86_64-w64-mingw32/bin/ld.exe: cannot find -ldl

lua-5.3.4_SourcessrcMakefile中区分平台(PLATS):genericlinux

generic: $(ALL)

linux:
    $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"

srlua-102Makefile中仅有Linux build,其中正有-ldl

如在srlua-102Makefile中的路径,需使用双引号,但注意不要嵌套了,只需要在最外层。

LUA_TOPDIR= C:ProgramFileslualua-5.3.4_Sources
LUA_INCDIR= "$(LUA_TOPDIR)include"
LUA_LIBDIR= "$(LUA_TOPDIR)"
INSTALL_DIR= ./

成功编译出srglue.exesrlua.exe

lua-5.3.4_Sourcessrc中的make_uname.bat涉及make_uname(uname是linux的概念,包含mingw4mingw4_64cygw17)、tecmake(除包含mingw4mingw4_64cygw17,还包含vc10vc10_64)。
lua-5.3.4_SourcessrcMakefile主要涉及linuxgeneric(对应ALLallALL_TLUA_ALUA_TLUAC_TLUA_Aliblua.a(linux的静态库)、LUA_TluaLUAC_Tluac

追查lua-5.3.4_SourcessrcMakefile.tecmake,Windows_NT下对应tecmakewin.mak(否则对应tecmake.mak),WLUA=wula(貌似windows下)

除了all包含lualib、lua、luac、(windows平台相关的)wlua。有单独的、基础的lualib——TECMAKE_CMD(其余lualuacwlua都基于他)。

编译器主要使用了gcc、g++。
其区别参见gcc和g++是什么关系? – 知乎 (zhihu.com)(未提及平台相关)

参见:Welcome to MinGW.org (osdn.io)(对比CygWin,在POXIS上支持Windows的基础运行时库?)

在环境变量中调整下顺序,先MinGW(后MinGW64)即可。
然后make –version检查下。
或者,用链接构造目录,在环境变量path中移动这两个目录的先后,实现切换32、64位。貌似不可以,还会使用到bin下的其他应用,貌似使用其相对位置确定plugin的位置。

check.cmd的内容

where make
make --version
where gcc
gcc --version
pause

更换编译工具后报错

除开错误,(第2行)是lua-5.3.4_SourcesMakefile进入了scr,使用其中的makefile(lua-5.3.4_SourcessrcMakefile
从后往前,makemake[1]后者即嵌套的,所以Makefile:56Makefile:63定位注意是哪层的makefile。

以上问题在于文件的路径为C:ProgramFilesMinGWlibexecgccmingw329.2.0liblto_plugin-0.dll而我重命名mingw32-gcc-9.2.0.exegcc
对照MinGW64文件夹应该是自动匹配,但没见设置。
参考:gcc: fatal error: ‘-fuse-linker-plugin’, but liblto_plugin-0.dll not found – Google 搜索

解决方法之一:gcc -fno-use-linker-plugin,参见Using MinGW to compile C code, but error liblto_plugin-0.dll not found? – Stack Overflow

使用gcc插件路径会使用make中的版本号,故,不能make+gcc混搭。
否则出现C:ProgramFilesmingw64inld.exe: /cygdrive/c/ProgramFiles/cygwin64/bin/../lib/gcc/x86_64-pc-cygwin/10/cyglto_plugin.dll: error loading plugin:,而实际路径为C:ProgramFilesmingw64libexecgccx86_64-w64-mingw328.1.0liblto_plugin-0.dll

10来自x86_64-pc-cygwin-gcc-10.exex86_64-w64-mingw32-gcc-9.2.0.exe(一个是cygwin,一个是mingw32根本就不是一个头)

ld.exe,仅mingw64in下有(MinGW无)。

使用mingw Installation Manager更新完后,正常了部分后cc1报错MinGW bin libmpfr-6.dll(libmpfr-6.dll)

发表评论

您的电子邮箱地址不会被公开。