萝卜L

导航

过程流水记录-编译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,测试正常。

posted on 2021-07-25 22:32  萝卜L  阅读(524)  评论(0编辑  收藏  举报