如何将Linux端POSIX标准的程序移植到windows端 (一)

原创 2014年10月06日 19:18:28

由于项目需要,必须将Linux平台以POSIX标准改编的Lua解释器移植到windows平台下,并且需要在Qt中被多线程调用。

之前走了很多弯路,这里现将这些曲折描述下,不过这些方法对于Lua源码编译移植到window平台来说不失为一种更简单的方法,不过笔者将Lua的源码改了,所以在编译时遇到了很多困难。

1.下载Lua源码,并解压

Lua源码现在已将更新到lua-5.2.3了,由于笔者改编源码时用的是lua-5.1.5,所以这里下载lua-5.1.5.tar.gz。在windows下解压成lua-5.1.5文件夹,文件夹下有doc,etc,src,test文件夹,其中src文件夹下的就是lua的源码,在linux下在src下运行make命令就可以得到lua,luac解释器和编译器文件,不过在windows平台下不能获得。

2.下载Mingw,并安装

这里请参照http://blog.csdn.net/xhhjin/article/details/8449251,并记住一定要在Path路径中增加Mingw下bin目录所在路径。

3.在上述lua的解压文件夹lua-5.1.5下src目录下新建luacpath.h文件。

详细信息参照:https://gist.github.com/starwing/4756700。文件内容如下:

luacpath.h

#ifndef luacpath_h
#define luacpath_h
 
 
#undef LUA_CDIR
#undef LUA_CPATH_DEFAULT
 
#define LUA_CDIR	"!\\"
#define LUA_CPATH_DEFAULT \
		LUA_CDIR"clibs\\?.dll;" LUA_CDIR"clibs\\loadall.dll;" \
		LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll;" ".\\?.dll"
 
 
#endif /* luacpath_h */

4.在上述lua的解压文件夹lua-5.1.5下新建bin文件夹,在bin文件夹下新建build.bat批处理文件。文件内容如下:

build.bat

<pre name="code" class="html">@setlocal
@if "%1" == "mingw" goto :build_mgw
@if "%1" == "vs" goto :build_vs
@if "%1" == "dist" goto :install
@if "%1" == "" goto :build_mgw
 
@echo usage: %1 [mingw|vs|dist]
@goto :EOF
 
 
:build_mgw
@set srcdir=..\src\
@set CFLAGS=-s -O3 -Wall -I. "-DLUA_USER_H=\"luacpath.h\""
 
@echo build lua52.dll ...
gcc %CFLAGS% -DLUA_BUILD_AS_DLL -c %srcdir%*.c
@del lua.o luac.o
gcc -s -mdll -o lua52.dll -Wl,--out-implib,liblua52.dll.a *.o
@echo build lua.exe ...
gcc %CFLAGS% -o lua.exe %srcdir%lua.c -L. -llua52
@echo build luac.exe ...
gcc %CFLAGS% -c %srcdir%*.c
@del lua.o luac.o
ar rcs liblua52.a *.o
gcc %CFLAGS% -o luac.exe %srcdir%luac.c -L. -static -llua52
@del *.o 2>nul
goto :dist
 
:build_vs
@set srcdir=..\src\
@set MYCOMPILE=/nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE "/DLUA_USER_H=\"<span style="font-family: Arial, Helvetica, sans-serif;">luacpath.h\"</span>"
@set MYLINK=link /nologo
@set MYLIB=lib /nologo
@set MYMT=mt /nologo
 
@echo build lua52.dll ...
%MYCOMPILE% /DLUA_BUILD_AS_DLL %srcdir%*.c
@del lua.obj luac.obj
%MYLINK% /DLL /out:lua52.dll *.obj
if exist lua52.dll.manifest^
  %MYMT% -manifest lua52.dll.manifest -outputresource:lua52.dll;2
%MYCOMPILE% /DLUA_BUILD_AS_DLL %srcdir%lua.c
%MYLINK% /out:lua.exe lua.obj lua52.lib
if exist lua.exe.manifest^
  %MYMT% -manifest lua.exe.manifest -outputresource:lua.exe
%MYCOMPILE% %srcdir%*.c
del lua.obj luac.obj
%MYLIB% /out:lua52s.lib *.obj
%MYCOMPILE% %srcdir%luac.c
%MYLINK% /out:luac.exe luac.obj lua52s.lib
if exist luac.exe.manifest^
  %MYMT% -manifest luac.exe.manifest -outputresource:luac.exe
@del *.exp *.obj *.manifest
goto :dist
 
 
:dist
@echo install ...
@set dstdir=.\Lua52\
mkdir %dstdir%         2>nul
mkdir %dstdir%clibs    2>nul
mkdir %dstdir%include  2>nul
mkdir %dstdir%lib      2>nul
mkdir %dstdir%lua      2>nul
 
copy /y *.dll            %dstdir%           >nul
copy /y *.exe            %dstdir%           >nul
copy /y *.a              %dstdir%lib        >nul
copy /y %srcdir%lua*.h*  %dstdir%include    >nul
copy /y %srcdir%laux*.h  %dstdir%include    >nul
copy /y %dstdir%lua.exe  %dstdir%lua52.exe  >nul
copy /y %dstdir%luac.exe %dstdir%lua52c.exe >nul
 
 
:EOF
echo finish


5.双击build.bat即可生成lua.exe和luac.exe文件。若想知道编译的详细信息,可以在cmd下跳转到上述bin目录下运行build.bat




版权声明:本文为博主原创文章,未经博主允许不得转载。

Windows系统对POSIX的支持

近日使用ACE开发,需要用到正则表达式,发现ACE下正则表达式需要POSIX接口,故有此文。 简介 POSIX全程Portable Operating System Interface for Uni...
  • hyzsnest
  • hyzsnest
  • 2009年10月26日 21:40
  • 2904

Windows下 POSIX 线程编程

1. POSIX 标准        POSIX是Portable Operating System Interface of Unix的缩写。由IEEE(Institute of Electrica...
  • liuyongjin1984
  • liuyongjin1984
  • 2008年01月07日 23:20
  • 2084

C/C++ Windows移植到Linux

近期写了有关Socket的程序,需要从windows移植到linux。现把有用的东东收集整理记录下来。   1.头文件 windows下winsock.h或winsock2.h; li...
  • woshiyuanlei
  • woshiyuanlei
  • 2017年04月10日 17:05
  • 1026

使用Windows7中的POSIX子系统进行开发Unix程序(与Visual Studio2008的集成使用)

使用Windows7中的POSIX子系统进行开发Unix程序(与Visual Studio2008的集成使用)
  • butterflydog
  • butterflydog
  • 2011年03月07日 22:26
  • 4681

用于windows的posix regex C库

  • 2009年03月16日 23:32
  • 72KB
  • 下载

如何将Linux端POSIX标准的程序移植到windows端 (一)

由于项目需要,必须将Linux端POSIX标准
  • zuijinhaoma8
  • zuijinhaoma8
  • 2014年10月06日 19:18
  • 833

如何将Linux端POSIX标准的程序移植到windows端 (二)

上回讲的是怎样将Lua源码从Linux平台移植到windows平台,youyu
  • zuijinhaoma8
  • zuijinhaoma8
  • 2014年10月11日 14:12
  • 491

端到端语音识别(一) 概况

传统方法的局限性[1]HMMMarkovian Assumptionp(qt|q
  • xmdxcsj
  • xmdxcsj
  • 2017年04月20日 19:49
  • 1531

windows posix 线程库

  • 2016年10月11日 19:57
  • 978KB
  • 下载

MinGW+Posix

MinGW不支持POSIX,需要下载第三方Posix库 下载地址:http://sourceware.org/pthreads-win32/ 注意:对于上述下载中,已编译好的"libpthreadGC...
  • duanbeibei
  • duanbeibei
  • 2011年02月16日 16:49
  • 2804
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何将Linux端POSIX标准的程序移植到windows端 (一)
举报原因:
原因补充:

(最多只允许输入30个字)