Windows下怎样编译出可在Linux上linux执行程序反编译的程序

Mingw:在Linux系统下编译Windows的程序_linux吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:148,278贴子:
Mingw:在Linux系统下编译Windows的程序收藏
转载自:创意安天论坛 Mingw:在Linux系统下编译Windows的程序 ... 4%E7%A8%8B%E5%BA%8FUbuntu下可以直接安装:sudo apt-get install mingw32 mingw32-binutils mingw32-runtime安装后编译程序可以:i586-mingw32msvc-g++(编译C++程序)i586-mingw32msvc-gcc(编译C程序)用法和gcc/g++非常类似。如hello.c程序:int WINAPI WinMain (HINSTANCE hInstance,&&&&&&&&&&&&&&&&&&&& HINSTANCE hPrevInstance,&&&&&&&&&&&&&&&&&&&& PSTR szCmdLine,&&&&&&&&&&&&&&&&&&&& int iCmdShow){&&&& MessageBox (NULL, "Hello", "Hello Demo", MB_OK);&&&& return (0);}编译:i586-mingw32msvc-gcc hello.c -o hello.exe -mwindows注:-mwindows指示其编译的是windows程序,若编译的是console(命令行)程序,则不需要这个参数。若安装了wine,还可以测试一下这个程序:wine hello.exe
和张大佛爷、二月红一起去探秘矿洞墓穴!
其实用Wine也可以。
我想知道怎么把&gtk&库加进去
怎么和Qt搭配交叉编译?
转自Fedora 11中用MinGW编译Windows的Qt4程序
琢磨了一上午,六级就放弃了……
前两天装上的F11,一大亮点就是Windows的交叉编译工具MinGW。决定尝试用MinGW编译Qt4程序。于是昨天去下载MinGW
#yum install mingw* -y
里面大部分库都是几百K,大的有上兆的,除了Qt库,100M。汗,Qt不愧是个万能库……电脑开了一宿,早上起来爽爽的看见
“Complete!”。这时默认的PATH下多了几个可执行文件,我就记住了mingw32-configure和mingw32-make,因为Qt
用qmake生成Makefile,不用configure,所以我没有用到mingw32-configure。打开控制台,进入一个Qt工程里,这时
才发现不知道怎么qmake,因为默认的qmake生成的是用GCC编译连接的。于是又用yumex查看mingw32-qt-qmake的已安装文件,
发现有一个/usr/lib/qt4/mkspecs/fedora-win32-cross/qmake.conf,嗯,应该就是用它了。于是:
$qmake-qt4 -spec /usr/lib/qt4/mkspecs/fedora-win32-cross
果然很顺利,生成了Makefile和Makefile.Release还有Makefile.Debug。接着:
$mingw32-make
咦,出错了……是连接的时候找不到“-lQtGui”。查看连接参数,找到“-L/usr/lib/i686-MinGW(后面忘记怎么拼了……)
/sysroot/lib”,于是进入这个文件夹,看到有“libQtCore4.a”、“libQtGui4.a”什么的,所以有两种办法解决连接问
1.一劳永逸法
就是在那个文件夹里建立符号链接,增加libQtCore.a==&libQtCore4.a什么的
2.临时修改法
不去建立符号链接,直接修改Makefile。打开Makefile.Release,找到链接参数LFLAGS那一行,把后面的“-lQtGui”改成
“-lQtGui4”,所有用到的Qt连接库都这样修改,加个4就OK了。
之后再$mingw32-make,嗯这回成功了。不过编译出来的文件就几十K,所以知道它用的是动态库。把exe文件copy到windows上,接着
去/usr/lib/i686-Min……/sysroot/bin,把里面的dll文件都copy到windows上去。重启进入Windows。注
意,如果直接运行那个exe文件,会提示缺少MSVCP80.DLL和MSVCR80.DLL,下载之后又说无法定位程序入口点。我几经折腾,发现不要管
这个提示,不需要这两个dll的。把libgcc_s_sjlj-1.dll、mingwm10.dll还有用到的Qt库dll(比如
QtCore4.dll什么的)copy到exe文件的目录中,运行,已经可以运行了,就是GUI程序总是多一个控制台窗口。去看Qt4
Assisstant,发现编写Windows程序的时候应该在.pro文件中指定是窗口程序还是控制台程序。于是再回到F11,修改.pro文件,增加
CONFIG += windows
再重新qmake、编译,但是出来的exe文件还没有改变。思考了良久,发现qmake的时候应该用win32模式:
$qmake-qt4 -spec /usr/lib/qt4/mkspecs/fedora-win32-cross -win32
这样再编译,出来的exe文件总算没有那个控制台了^o^
总结一下,交叉编译Windows平台的Qt4程序的步骤:
1.写代码,可以在native Linux上编译、调试
2.修改.pro文件,增加:
CONFIG += windows
$qmake-qt4 -spec /usr/lib/qt4/mkspecs/fedora-win32-cross -win32
4.修改Makefile.Release,找到LFLAGS = ……
-lQtCore那些,把-lQtCore改成-lQtCore4,后面的-l参数类似。
$mingw32-make
6.发布exe文件,和libgcc_s_sjlj-1.dll、mingwm10.dll还有Qt*.dll(根据用到的库而定,比如用到
QtCore、QtGui、QtNetwork就发布QtCore4.dll、QtGui4.dll、QtNetwork4.dll)。那些dll文件在
/usr/lib/i686-mingw……(忘记全称了:-[)/sysroot/bin下面
7.就可以在Windows上运行啦^^
苍天保佑我的六级能过……唉,准备明年接着考……
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或&&&&在Windows上编译、调试LINUX程序: XBuildDev
在Windows上编译、调试LINUX程序: XBuildDev
XBuildStudio(C) 是运行在Windows平台上的,专为LINUX/UNIX平台软件开发的可视化工具,类似于Visual C++ Studio开发环境。该工具能有效提升您在LINUX环境的开发效率,更快地缩短开发周期。
支持C/C++关键字语法高亮。
强大的编辑功能,支持自动缩进[正在进行]。
支持多个工程管理。
编译及错误定位。
支持单步调试,变量实时显示。
设置和查看断点。
调用栈、线程查看。
函数导航,快速定位[正在进行]。
若举报审核通过,可奖励20下载分
被举报人:
wangpeng649
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
操作系统下载排行在linux下,代码编译后得到一个可执行文件,运行该文件时可以附加命令选项,在windows下有相同的功能吗?
比如linux下有个可执行文件a.out,它有一些命令选项,通过改变选项参数可以传递不同的值给a.out执行程序命令行:./a.out
--how --where --when在程序源代码不变的情况,windows是否也有相似的功能,即选项参数被修改时不用重新编译a.out,而从外部传递参数给a.out,也是命令行模式执行?
按投票排序
DOS 3.x时代都有不过M$的参数规范是“/”开头
windows下几乎是一模一样的。
Windows是一样的,参数不仅可以通过命令行,还可以通过API,不管是命令行程序还是图形程序都可以有参数。WIN7里打开任务管理器,菜单栏-视图-选择列-命令行参数,选中以后任务管理器里就可以看到每个进程的参数了。如果是VC/VS等,在工程属性之类的地方也可以手工加参数。
Windows 再怎么黑int main (int, char**, char**) 也还是有的
已有帐号?
无法登录?
社交帐号登录&&/&&&&/&&&&/&&
市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核、桌面环境和各种常用的必备工具,国内使用较多的是Ubuntu(乌班图)、CentOS、Deepin(深度Linux)。本教程以Deepin为例来讲述如何编译C程序。
Gedit是一个简单实用的文本编辑器,拥有漂亮的界面,支持语法高亮,比 Vim 更易上手。本教程将Gedit作为C代码编辑器。
Gedit的安装:
在当前目录下创建一个C源文件并打开:
可以看到gedit的窗口,输入:
#include&stdio.h&
#include&stdlib.h&
int main()
printf(&Hello,Linux.\n&);
gedit 窗口截图
注意:Gedit支持多种语言的高亮显示,一般情况下能够自动识别语言,如果识别错误,请在&编辑-&高亮模式&下选择C。
Linux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具。本教程毫不犹豫地使用GCC来编译C程序。
保存文件后退出,打开终端并&cd&到当前目录,输入下面的命令:
& & gcc test.c -o test
可以直接将C代码编译链接为可执行文件。
可以看到在当前目录下多出一个文件 test,这就是可执行文件。不像Windows,Linux不以文件后缀来区分可执行文件,Linux下的可执行文件后缀理论上是可以任意更改的。
当然,也可以分步编译:
& & gcc&-E&test.c&-o&test.i
在当前目录下会多出一个预处理结果文件 test.i,打开 test.i 可以看到,在 test.c 的基础上把stdio.h和stdlib.h的内容插进去了。
2)&编译为汇编代码
&&&&gcc&-S&test.i&-o&test.s
其中-S参数是在编译完成后退出,-o为指定文件名。
3)&汇编为目标文件
&&&&gcc&-c&test.s&-o&test.o
.o就是目标文件。目标文件与可执行文件类似,都是机器能够识别的可执行代码,但是由于还没有链接,结构会稍有不同。
3) 链接并生成可执行文件
&&&&gcc&test.o&-o&test
如果有多个源文件,可以这样来编译:
&&&&gcc&-c&test1.c&-o&test1.o
&&&&gcc&-c&test2.c&-o&test2.o
& & gcc&test1.o&test2.o&-o&test
注意:如果不指定文件名,GCC会生成名为a.out的文件,.out文件只是为了区分编译后的文件,Linux下并没有标准的可执行文件后缀名,一般可执行文件都没有后缀名。
编译后生成的test文件就是程序了,运行它:
&&&&./test
如果没有运行权限,可以使用sudo命令来增加权限(注意要在Linux的分区下):
&&&&sudo&cdmod&test&777
对于程序的检错,我们可以用-pedantic、-Wall、-Werror选项:
-pedantic选项能够帮助程序员发现一些不符合&ANSI/ISO&C标准的代码(并不是全部);
-Wall可以让gcc显示警告信息;
-Werror可以让gcc在编译中遇到错误时停止继续。
这3个选项都是非常有用的。

我要回帖

更多关于 linux交叉编译windows 的文章

 

随机推荐