过程流水记录-编译Lua srlua使用iup-完结
不确定make是64或32位版本。
感觉make版本与问题无关。(仅应关心gcc平台版本)
报错
虽然文件存在(..\MinGW\bin\libmpfr-6.dll)
但MinGW Installation Manager中没有安装
出现问题
手动‘删除’文件后,识别错误
移除后重新安装
但为何之前没安装完全?
继续出错(缺少w32api.h)
先尝试手动添加项mingw32-w32api-dev(更应该按预设打包添加)
完成编译,新生成..\lua\lua-5.3.4_Sources\src\liblua.a。
重新编译32位srglue、srlua成功
打包lua,dll为exe,执行异常。
当从路径移除iuplua,会报错
当iuplua路径正常,会意外结束
正常应该
以上iup.dll没在路径下,所以在IDE下,也应该报错?但其在系统path环境变量下。
排除系统环境变量的影响,如果iuplua.dll路径正确,iup.dll路径异常,会报错“找不到指定模块”(iup.dll)
但即便iup.dll与iuplua.dll同在Lib目录下,仍报错如上。
需要iup.dll与test.exe在同目录下,IDE下运行正常。但test.exe仍意外结束(有in无out)。
如果直接require'iup'报错“找不到指定的程序。”,应该是iup非面向lua,未包含Lua_open接口。
顺带发现个ZeroBrane Studio的bug,当ctrl+shift+↑/↓移动,涉及最后一行时,会叠加..
以上异常,使用print(pcall(require,'iuplua'))也无法在test.exe中有反馈..
- 如果路径中移除iup.dll,会正常地报错“找不到指定的模块”
参见[Lua 找不到指定模块 找不到指定的程序](https://www.cnblogs.com/RobertL/p/18171804)。
怀疑是iup.dll版本的问题..尝试使用lua-5.3.4_Win32_dllw4_lib中的iup.dll,自IUP - Browse /3.30/Windows Libraries/Dynamic at SourceForge.net,其中的静态库都是.a,如iup.a。
IDE中与打包的test.exe差异,还是在使用的liblua.a、srlua编译的不同。
更改了iup的编译版本,问题依旧,尝试更改iuplua的版本iup-3.30-Lua53_Win32_dllw6_lib。
仍不行,尝试更改编译srlua所用lua5.3的版本lua-5.3.4_Win32_dllw4_lib。(起因在于没有编译srlua的windows msvcrt的方案..)
使用原生的#Linux build参数(-llua -lm -ldl)编译时报错cannot find -llua/-ldl。
尝试去掉-llua/-ldl参数,报一系列的错srlua.c:(.text+0x6c): undefined reference to `lua_tolstring'
尝试lua-5.3.4_Win32_mingw6_lib(其下有liblua.a,无lua53.dll)。
同样两种报错,cannot find -llua/-ldl或undefined reference to ..。
注意,以上两个包中的命名都是liblua53.a(与lua53.dll),而非liblua.a,尝试更名。
错误变了,仅仅cannot find -ldl。更改makefile,去掉它。编译成功。
测试成功!
总结,去掉Linux build预设MYLIBS中的-ldl,配合lua-5.3.4_Win32_dllw4_lib,配合iup-3.30-Lua53_Win32_dllw6_lib、iup-3.30_Win32_dllw6_lib。
尝试使用dll版本(15)的iup、iuplua。仅iup——iup-XXX_Win32_dllXXX_lib,测试正常;同时iuplua——iup-XXX_Lua53_Win32_dllXXX_lib,测试正常。