`
lovecontry
  • 浏览: 1033163 次
文章分类
社区版块
存档分类
最新评论

[技术学习]使用 wine 在Unix平台进行 WIN32/MFC 开发

 
阅读更多
插叙:
@@ 大项目一定得用 MFC 吗?
## 不用 MFC,那你用什么?
@@ 我想用 wxWidgets。
## 。。。
@@ 我看 wxWidgets 和 MFC 的构架很相近,相互移植起来也容易。
## 但是你为何不要用 MFC 呢?我们学的就是 MFC 呀。
@@ 但是 MFC 在别的平台上没办法部署。
## 那你就用虚拟机装个 Windows,再在里面装个 Visual Studio 啊。
@@ 。。。



1) 使用 WIN32 api 开发

winelib
C 源代码文件 -> 目标文件
winegcc -mno-cygwin -I. -c winmain.c -o winmain.o
资源文件 -> 目标文件
wrc resource.rc -foresource.res
链接
winegcc winmain.o resource.res -mwindows -mno-cygwin -m32 -o winmain.exe.so
执行
wine winmain.exe.so

生成原生的 wine 二进制文件
优点:由于是直接用 wine 编译的,通过 wine 加载和执行效率都比原生的 WIN32 exe 好。而且自带 winemaker 工具,可以很方便地生成 makefile 文件或者从 Visual Studio 的工程项目/解决方案文件转换成 makefile,自动处理 DOS 不区分大小写引起的问题。
缺点:二进制文件无法直接在 Windows 上执行。

mingw32
C 源代码文件 -> 目标文件
i686-pc-mingw32-gcc -mno-cygwin -I. -c winmain.c -o winmain.o
资源文件 -> 目标文件
i686-pc-mingw32-windres resource.rc -o resource.o
链接
i686-pc-mingw32-gcc winmain.o resource.o -mwindows -mno-cygwin -m32 -o winmain.exe
执行
wine winmain.exe

生成原生的 WIN32 二进制文件
优点:二进制文件能够直接在 Windows 上执行。Windows 上也有 mingw32,一致性可以保持。
缺点:需要自己弄 makefile,而且由于 mingw32 的 windres 资源编译器不支持 utf-8 字符,如果在资源文件中硬编码中文汉字,结果编译出来会显示为乱码(utf-8 强行识别为 iso-8859-1)。快捷键资源失效。



2) 使用 MFC 开发

VC6 编译器 + MFC 库
下载 winetricks:wget -c http://kegel.com/wine/winetricks。
安装运行时文件:sh winetricks -q vcrun6 mfc40 dcom98。
将 VC98/Bin/ 目录下的 C1XX.DLL,C2.DLL,CL.EXE,CVTRES.EXE,LINK.EXE 软链接到 ~/bin 里面。
将 VC6/Common/MSDev98/Bin/ 目录下的 RCDLL.DLL,RC.EXE 软链接到 ~/bin 里面。
执行 CL.EXE 会报缺少 mspdb60.dll,直接从网上下载这个 mspdb60.dll 文件放在 ~/bin 里面。

C++ 源代码文件 -> 目标文件(路径自己换一下吧)
CL.EXE /c /nologo /GX /MD /D "_AFXDLL" /I. /I/home/nihui/vc6/VC6/VC98/Include /I/home/nihui/vc6/VC6/VC98/MFC/Include mfcmain.c /Fomfcmain.obj
资源文件 -> 目标文件
RC.EXE resource.rc /foresource.res
链接
LINK.EXE /nologo /subsystem:windows /LIBPATH:/home/nihui/vc6/VC6/VC98/Lib /LIBPATH:/home/nihui/vc6/VC6/VC98/MFC/Lib mfcmain.obj resource.res /OUT:mfcmain.exe
执行
wine mfcmain.exe

生成原生的 WIN32 二进制文件
优点:二进制文件能够直接在 Windows 上执行。也可以直接链接 Windows 的库(如 MFC)。编译器选项和 Windows 版的一致。
缺点:具体开发时需要自己弄 makefile。VC6 编译器对 C++ 语言支持不佳。非自由软件,需购买许可。



3) 一些 FAQ

为什么 winelib 编译出来的 exe.so 文件无法直接放在 Windows 上执行?
虽然从表面上看,也是用 wine xxx 的方式执行,但文件本身已不是 WIN32 程序,而是 wine 库,就好比 Unix 的可执行文件也不能在 DOS 下执行一样。

VC6 的 IDE 呢?
VC6 的 IDE 可以运行,但是调试功能坏了,编译功能也需要花功夫才能搞定,何况编辑功能也不强,中文版界面甚至会显示不出中文字符。所以还不如直接用 make 管理编译,自己选一个编辑器编辑。

为什么使用 VC6,而不是 VS2008 或者更新版本?
因为新版的 Visual Studio 带有 .net 框架支持,在 wine 上部署 .net 框架十分困难。而 vc6 则没有这部分。

win32 api 开发可以使用 VC6 编译器吗?
可以,但已经有支持 C++ 标准更好的自由软件替代方案,何必要用 vc6 呢?

MFC 开发可以使用 winelib 或者 mingw32 吗?
理论上和技术上可以,但这种做法可能不被允许。把 MFC 的源代码使用 winelib 或者 mingw32 编译,然后再用。所以,必须先得到 mfc 的合法拷贝。

如果我无视 MFC 库的授权许可问题,具体该怎么做呢?
使用 winelib 编译得自己弄好 mfc.dll.spec 文件,基本上就是函数库的外链符号表,很困难,如果真有意尝试请参阅以下文档。
http://www.winehq.org/docs/winelib-guide/mfc
http://www.cs.colorado.edu/~main/cs1300/doc/mingwfaq.html#guisapplicationframeworksuserinterfaces

使用 wine 进行 WIN32/MFC 开发 - nihui - Nihuis Blog
--------------------------------------------------------
本文转自: http://shuizhuyuanluo.blog.163.com/blog/static/77818120091030113223845/
分享到:
评论

相关推荐

    deepin-wine在线/离线安装包

    我在该网页下载了安装包放在了压缩包里,如果觉得占空间,可以把它删掉,使用我自己用C++写的在线Deepin-wine安装器也可以。 百度网盘下载链接:https://pan.baidu.com/s/1d_vdDKGobR_oxWV9iGM98g 提取码:ur2s 蓝奏...

    32位wine rpm包,适用于REHL/CentOS 7

    REHL/CentOS 7系统,默认是64...本资源提供了32位i686(注意不是i386哦)版本的rpm包,及其依赖的包,并且提供了一个安装脚本,自动将这些包在你的机器上生成yum仓库,并通过这个仓库安装rpm包。wine的版本号位3.0.2。

    MFC42.dll for wine

    我用在wine下的,备份一个,ubuntu 10.04

    Wine使用指南 Wine使用指南

    Wine使用指南Wine使用指南Wine使用指南

    riched20.dll

    在Ubuntu系统下,需要安装Windows下的软件,在Ubuntu中安装Wine,在Wine中安装钉钉,微信等应用的时候,会发现输入框显示不了光标和输入的文字,那么就需要riched20.dll这个库来替换,在win7 或 xp (32位的) 找到c:/...

    wine主题更换为Windows10。

    mac wine主题更换包,linux wine主题更换包。

    wine (linux 下运行windows程序)

    这个层即提供了一个用来从Windows源进出到UNIX的开发工具包(Winelib),也提供了一个程序加载器,该加载器允许不用任何修改Windows 3.1/95/NT的二进制文件,就可以运行在Intel Unix及其衍生版本下.Wine可以工作在绝大...

    Wine使用教程,在linux下运行windows程序

    Wine 是 win32 库的一个 UNIX 实现,由上百个志愿开发者从头(from scratch)写成并在一个开放源代码许可之下发行。任何人都可以下载并阅读源 代码,并修理存在的缺陷。Wine 社区众多有才干的程序员在增进 Wine 上...

    wine 在Linux下运行Windows程序。

    WINE(WINdows Emulator)在X和UNIX之上的,Windows 3.x 和 Windows APIs的实现。它是一个Windows兼容层,通俗的讲,就是一个Windows模拟器。这个层即提供了一个用来从Windows源进出到UNIX的开发工具包(Winelib);也...

    Ubuntu deepin-wine 解决系统非中文语言环境时软件无法设置为中文

    在/opt/deepinwine/tools/run.sh 中将 WINE_CMD 那一行修改为 WINE_CMD=“LC_ALL=zh_CN.UTF-8 deepin-wine” Ubuntu把wine的QQ、微信的系统托盘集成到状态栏 1 安装gnome-tweak-tool sudo apt install gnome-tweak-...

    wine-gecko-mono.zip

    给大家打包了一下最近的mono和gecko文件,分别是wine-gecko-2.47.1-x86_64.msi和wine-mono-4.9.4.msi。移动到/home/用户名/.wine目录下。运行wine msiexec /i wine-mono-4.9.4.msi //例如安装wine-mono。

    linux-使用Wine在Docker容器中运行酷QAirPro

    使用 Wine 在 Docker 容器中运行 酷Q Air / Pro

    wine使用图文手册

    wine 使用图文手册,简单配置,主要是有网通插件的学校用户使用wine安装上网查件

    配置wine编译环境脚本

    在linux下直接运行./build-config env 即可以自动配置wine的编译环境。运行./build-config precise_i386 可以配置32位chroot环境

    Linux wine技术详解

    些pdf文件详解了WINE的工作原理.对于想了解WINE或是熟悉LINUX底层的人很有用。

    wine中文使用手册

    wine使用的完全手册,讲解详细,而且是全中文,pdf和html两种格式都有。

    wine2.10在Linux上运行Windows应用

    Wine (Wine Is Not an Emulator)[即Wine不是一个模拟器]是一个在Linux和UNIX之上的,Windows 3.x和 Windows APIs的实现。注意,Wine不是Windows模拟器,而是运用API转换技术实做出Linux对应到Windows相对应的函数来...

    OtvdmSetup.exe

    OtVDM是运行在Win10上类似于Linux上使用的Wine程序,在安装了OtVDM的Win10主机上运行16位Win3.1/Win3.2/Pwin3.2程序如同运行64位Win10程序一样,原有珍贵而又稀缺的旧软件可以跑在Win10上。如果是新开发软件就不用它...

    使用Wine安装Source Insight

    ubuntu下用wine安装source insight

    在ubuntu中安装wine使用windows软件

    wine是一款用于虚拟使用windows的软件,你可以登陆官方网站,http://www.winehq.org /download 参看各种linux的安装方法,因为是国外的网站,都是英文,这里我只把在ubuntu中安装的方法翻译给大家,仅供参考,因为...

Global site tag (gtag.js) - Google Analytics