1. 安装wine,为了可以在linux平台上执行windows程序,这个就不说了,源里有,直接装就好了
2. 在windows平台上安装Visual Studio C++ 6.0 (个人比较喜欢6.0,因为小,而且还有MFC)
以下步骤要在linux内操作:
3. 拷贝c:\Program Files\Micro$oft Vi$ual $tudio 文件夹到 $HOME/.wine/drive_c/Program Files/
ok, 现在你有VC了,但你不能用,IDE也不能用,不知道为什么,不过不管了, 反正我并不喜欢VS的IDE。在$HOME/.wine/drive_c/Program Files/Micro$oft Vi$ual $tudio/VC98/Bin 这个文件夹里有一个文件: cl.exe
注意这个文件,它其实是和linux 的gcc 或 g++ 是一样的,是个编译器。虽然找到这个编译器了,但如果我们用它编译程序的话,它会保错,原因是:
在Windows系统中,有三个系统变量:PATH,LIB,INCLUDE, 这三个系统变量对应于 编译器所在文件夹,库文件夹,和头文件夹。
大家都知道windows有个东西叫注册表吧,gnome也有类似的东西,wine是可以直接编辑注册表的,因为它把注册表分为了几个部分,其中CURRENT_USER这个部分被存放在 $HOME/.wine/drive_c/user.reg 中,好了,有办法注册系统变量了。
vim ~/.wine/driver_c/user.reg
然后把下面的内容复制进去,哪里都可以:
[Environment] 1197666624
"Basemake"="C:\\Program Files\\Microsoft Platform SDK\\Include\\BKOffice.Mak\\"
"Bkoffice"="C:\\Program Files\\Microsoft Platform SDK\\"
"INCLUDE"="C:\\Program Files\\Microsoft Platform SDK\\Include\\.;C:\\Program Files\\Microsoft Visual Studio\\VC98\\Atl\\Include;C:\\Program Files\\Microsoft Visual Studio\\VC98\\mfc\\include;C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\"
"INETSDK"="C:\\Program Files\\Microsoft Platform SDK\\"
"LIB"="C:\\Program Files\\Microsoft Platform SDK\\Lib\\.;C:\\Program Files\\Microsoft Visual Studio\\VC98\\mfc\\lib;C:\\Program Files\\Microsoft Visual Studio\\VC98\\lib\\"
"MSDevDir"="C:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\"
"MSSdk"="C:\\Program Files\\Microsoft Platform SDK\\"
"Mstools"="C:\\Program Files\\Microsoft Platform SDK\\"
"PATH"="C:\\Program Files\\Microsoft Visual Studio\\Common\\Tools\\WinNT;C:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin;C:\\Program Files\\Microsoft Visual Studio\\Common\\Tools;C:\\Program Files\\Microsoft Visual Studio\\VC98\\bin;C:\\Program Files\\Microsoft Platform SDK\\Bin\\.;C:\\Program Files\\Microsoft Platform SDK\\Bin\\WinNT\\Y"
红色的部分比较重要,指明了编译器所在目录已经库文件和头文件
做完上面这些后,你已经可以正常的编译WIN32程序了
代码: 全选
wine cl test.cpp
代码: 全选
nafxcw.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcw.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
代码: 全选
wine test.cpp /MT
代码: 全选
libc.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
(这里解释一下,cl的原理跟gcc相同,是编译和link一起做了)
代码: 全选
wine cl test.cpp /MT /link /subsystem:windows
代码: 全选
wine test.exe
代码: 全选
#include "AFXWIN.H"
class MFC_Tutorial_Window :public CFrameWnd
{
public:
MFC_Tutorial_Window()
{
Create(NULL,"MFC Tutorial Part 1 CoderSource Window");
}
};
class MyApp :public CWinApp
{
MFC_Tutorial_Window *wnd;
public:
BOOL InitInstance()
{
wnd = new MFC_Tutorial_Window();
m_pMainWnd = wnd;
m_pMainWnd->ShowWindow(1);
return 1;
}
};
MyApp theApp;
写一个script , 让cl用起来像gcc或g++一样
sudo vim /usr/bin/cl
写入
代码: 全选
#!/bin/bash
#
file="$*"
#ar="user32.lib gdi32.lib odbc32.lib nafxcw.lib libc.lib LIBCMT.LIB MSVCRT.LIB"
ar="/MT /link /subsystem:windows"
if [ $file!=null ]; then
wine cl $file $ar
else
wine cl
fi
这样,你在编译windows程序时,只需执行
cl test.cpp 就OK了
欢迎补充