zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    TCP 基础知识
    Spring Boot 实战 —— 日志框架 Log4j2 SLF4J 的学习
    MySQL 实战笔记
    Java 基础
    RPM 包的构建
    RPM 包的构建
    9. 桶排序
    8. 基数排序
    7. 计数排序
    6. 快速排序
  • 原文地址:https://www.cnblogs.com/RobertL/p/15053892.html
Copyright © 2011-2022 走看看