• Lua 编译 GCC Linux Windows


    之前是什么类似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(对应ALL-all-ALL_T-LUA_ALUA_TLUAC_TLUA_A-liblua.a(linux的静态库)、LUA_T-luaLUAC_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(其余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)

  • 相关阅读:
    定点数的表示
    [收集]XMPP使用tls 和sasl登录
    socket函数
    [收集] SendMessage、PostMessage原理
    DLL中用malloc分配了一块内存,但是在exe程序中释放引发的错误:其原因可能是堆被损坏,这也说明 **.exe 中或它所加载的任何 DLL 中有 bug。
    关于在IWebBrowser中无法响应Ctrl+C等快捷键的解决方法
    Enum 操作
    程序员面对分歧和难题应当具备的态度【转】
    NDIS学习笔记一
    NDIS学习笔记二——(模拟丢包)
  • 原文地址:https://www.cnblogs.com/RobertL/p/15053892.html
Copyright © 2020-2023  润新知