之前是什么类似LuaRocks的工具集成生成了。
对照如下include文件夹,不同版本中.h文件相同,.hpp不同。
文件夹..lua-5.3.4_Sourcesinclude、lua-5.3.4_Win32_dll15_lib、lua-5.3.4_Win32_mingw6_lib、lua53include;
文件luaconf.h、lua.h、lauxlib.h、lualib.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):generic、linux。
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.exe、srlua.exe。
lua-5.3.4_Sourcessrc中的make_uname.bat涉及make_uname(uname是linux的概念,包含mingw4、mingw4_64、cygw17)、tecmake(除包含mingw4、mingw4_64、cygw17,还包含vc10、vc10_64)。
lua-5.3.4_SourcessrcMakefile主要涉及linux、generic(对应ALL–all–ALL_T–LUA_A、LUA_T、LUAC_T,LUA_A–liblua.a(linux的静态库)、LUA_T–lua、LUAC_T–luac)
追查lua-5.3.4_SourcessrcMakefile.tecmake,Windows_NT下对应tecmakewin.mak(否则对应tecmake.mak),WLUA=wula(貌似windows下)
除了all包含lualib、lua、luac、(windows平台相关的)wlua。有单独的、基础的lualib——TECMAKE_CMD(其余lua、luac、wlua都基于他)。
编译器主要使用了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)
从后往前,make、make[1]后者即嵌套的,所以Makefile:56、Makefile:63定位注意是哪层的makefile。
以上问题在于文件的路径为C:ProgramFilesMinGWlibexecgccmingw329.2.0liblto_plugin-0.dll,而我重命名mingw32-gcc-9.2.0.exe为gcc了。
对照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.exe、x86_64-w64-mingw32-gcc-9.2.0.exe(一个是cygwin,一个是mingw32根本就不是一个头)
搜ld.exe,仅mingw64in下有(MinGW无)。
使用mingw Installation Manager更新完后,正常了部分后cc1报错(libmpfr-6.dll)