当前位置: 技术问答>linux和unix
请问在Windows上能直接开发出在linux上运行的程序吗?
来源: 互联网 发布时间:2015-11-28
本文导语: 在linux上做C++的开发没有Win32上方便…… 不知道能不能在Windows平台下,直接就编译出能在linux上运行的target file 如果可以的话,我就只要在Win32上编译好程序,放到linux上执行就OK了 有没有知道的兄弟,告诉一声啊 thanks ...
在linux上做C++的开发没有Win32上方便……
不知道能不能在Windows平台下,直接就编译出能在linux上运行的target file
如果可以的话,我就只要在Win32上编译好程序,放到linux上执行就OK了
有没有知道的兄弟,告诉一声啊
thanks
不知道能不能在Windows平台下,直接就编译出能在linux上运行的target file
如果可以的话,我就只要在Win32上编译好程序,放到linux上执行就OK了
有没有知道的兄弟,告诉一声啊
thanks
|
不能。
|
目前还有这样的工具
|
绝对没有可能,装虚拟环境,说不定能写出那个平台下都能编译的代码。
但是,说到底,不离开 Windows 是学不了 Linux 的。
但是,说到底,不离开 Windows 是学不了 Linux 的。
|
用交叉编译工具不就可以了吗????
用cygwin环境,然后在下面使用GCC就行了
用cygwin环境,然后在下面使用GCC就行了
|
用交叉编译工具不就可以了吗????
===
是可以,不过要自己编译GCC,libc、stl等库,而且受限于其它库,能开发的应用很有限,一般就用于开发嵌入式应用。象楼主这样的需求,还是回答“不能”更合适:)
能不能讨论一下为什么不可以啊?
====
一般操作系统不同,ABI就不同,即使都是x86平台,可执行代码仍然是无法通用的。
===
是可以,不过要自己编译GCC,libc、stl等库,而且受限于其它库,能开发的应用很有限,一般就用于开发嵌入式应用。象楼主这样的需求,还是回答“不能”更合适:)
能不能讨论一下为什么不可以啊?
====
一般操作系统不同,ABI就不同,即使都是x86平台,可执行代码仍然是无法通用的。
|
你用smb嘛,在一台LINUX上放置源码,在另一台WINDOWS下通过smb直接访问修改LINUX下的代码(可以用soureinsight之类的软件来改代码),然后通过ssh来远程编译代码,然后在那台LINUX下再用cvs客户端来同步服务器上的代码,有什么不方便的????????
配置需求:一台LINUX服务器,一台LINUX公用机,N台WINDOWS客户端,可以在那台LINUX公用机上设几个用户,每个用户将服务器上的代码下载到自己的目录中,然后通过远程WINODWS机来访问!!!
如果你还想节省一台机子的话,就将LINUX服务器与公用机用一台来做,不过这样子公用机的负荷相当重,而且数据安全性不能保证!!!
由于WINDOWS下的可执行文件格式与LINUX下的可执行文件格式不一样,操作系统的API也不一样,运行环境也不一样,所以就不能直接在WINDOWS下编译成LINUX下的可执行文件。
在使用Cygwin时,就相当于在模拟一个LINUX下运行环境,以至于可以让GCC,MAKE等工具能运行起来,而不再需要交叉编译(假定都是基于X86),当然,Cygwin仅适用于大多数的情况,有些能在LINUX下运行的程序放在Cygwin下就有可能无法运行的,且都是基于命令行的工具,如果是GUI的,就无法在Cygwin下运行,所以一般情况下,还不如直接在LINUX下开发更好,何必要一个cygwin呢????至于那些C库,C++库等,这些在网上都是现成的,随便下载就行了,无需自己去编译!!!!!只不过某些比较稀少的库需要自己去整
配置需求:一台LINUX服务器,一台LINUX公用机,N台WINDOWS客户端,可以在那台LINUX公用机上设几个用户,每个用户将服务器上的代码下载到自己的目录中,然后通过远程WINODWS机来访问!!!
如果你还想节省一台机子的话,就将LINUX服务器与公用机用一台来做,不过这样子公用机的负荷相当重,而且数据安全性不能保证!!!
由于WINDOWS下的可执行文件格式与LINUX下的可执行文件格式不一样,操作系统的API也不一样,运行环境也不一样,所以就不能直接在WINDOWS下编译成LINUX下的可执行文件。
在使用Cygwin时,就相当于在模拟一个LINUX下运行环境,以至于可以让GCC,MAKE等工具能运行起来,而不再需要交叉编译(假定都是基于X86),当然,Cygwin仅适用于大多数的情况,有些能在LINUX下运行的程序放在Cygwin下就有可能无法运行的,且都是基于命令行的工具,如果是GUI的,就无法在Cygwin下运行,所以一般情况下,还不如直接在LINUX下开发更好,何必要一个cygwin呢????至于那些C库,C++库等,这些在网上都是现成的,随便下载就行了,无需自己去编译!!!!!只不过某些比较稀少的库需要自己去整
|
楼主有一句是这样说的:
我就只要在Win32上编译好程序,放到linux上执行就OK了
我的理解是在WINDOWS下写程序,编译,然后就把它放在LINUX下运行,所以我说要无法直接在WINODWS上编译的原因有三:
1.可执行文件格式不一样
2.系统的API不一样,只是标准C库对操作系统API作了封装,所以写标准C代码可以跨平台移植,前提就是在不同的平台下使用了不同的C库!!!
3.运行环境不一样,就这导致了有些编译工具无法直接运行,比如automake,gcc等,从而也就无法完成编译工作。
而cygwin模拟了LINUX运行环境,从而使一些基本工具能在WINDOWS下运行,从而实现编译工作,但它只是让常用的LINUX下的命令行工具可以使用,却无法使用一些诸如在GUI上可运行的软件,这就是它的局限性所在。
如果要想真正学会LINUX下的开发,最好在直接在LINUX下学习工作,LINUX下的工作效率未必就低,可以用soure navigator进行源码分析与编辑,还可以直接调用MAKE,跟soure insight一样好用,用DDD,gdb来调试,跟WINDOWS平台下的调试工具一样好用,用strace来跟踪程序,查看程序的系统调用,用sed,awk等来对文本操作,用各种脚本语言,应有尽有!!!!GCC对STL的支持也比较好,用SDL库编写游戏,图形界面,用GTK库,QT库,MYSQL。。。。。。
我就只要在Win32上编译好程序,放到linux上执行就OK了
我的理解是在WINDOWS下写程序,编译,然后就把它放在LINUX下运行,所以我说要无法直接在WINODWS上编译的原因有三:
1.可执行文件格式不一样
2.系统的API不一样,只是标准C库对操作系统API作了封装,所以写标准C代码可以跨平台移植,前提就是在不同的平台下使用了不同的C库!!!
3.运行环境不一样,就这导致了有些编译工具无法直接运行,比如automake,gcc等,从而也就无法完成编译工作。
而cygwin模拟了LINUX运行环境,从而使一些基本工具能在WINDOWS下运行,从而实现编译工作,但它只是让常用的LINUX下的命令行工具可以使用,却无法使用一些诸如在GUI上可运行的软件,这就是它的局限性所在。
如果要想真正学会LINUX下的开发,最好在直接在LINUX下学习工作,LINUX下的工作效率未必就低,可以用soure navigator进行源码分析与编辑,还可以直接调用MAKE,跟soure insight一样好用,用DDD,gdb来调试,跟WINDOWS平台下的调试工具一样好用,用strace来跟踪程序,查看程序的系统调用,用sed,awk等来对文本操作,用各种脚本语言,应有尽有!!!!GCC对STL的支持也比较好,用SDL库编写游戏,图形界面,用GTK库,QT库,MYSQL。。。。。。
|
如果想在windows编译完成的二进制代码在linux运行,这不太可能
如果想写出可移植性的代码,在windows下写,然后编译,连接就可以在windows下运行
如果代码是符合C++标准,不用到其独有的平台的特性,在该平台上编译,连接运行照样可以运行
无论是linux还是苹果者是一样的
如果想写出可移植性的代码,在windows下写,然后编译,连接就可以在windows下运行
如果代码是符合C++标准,不用到其独有的平台的特性,在该平台上编译,连接运行照样可以运行
无论是linux还是苹果者是一样的
|
其实楼主完全可以使用这样的办法:
直接改造Eclipse,在Eclipse上实现一个你们的集成开发环境,后台还是采用cygwin+gcc的方式,这样用户在Eclipse界面上编写程序,只需点一下鼠标就可以在后台用makefile进行编译,然后再给GDB加一个图形界面,这样就可以在Eclipse上进行图形化的调试了!!!!
你需要去理解一下如何在Eclipse建立自己的集成开发环境这方面的内容
直接改造Eclipse,在Eclipse上实现一个你们的集成开发环境,后台还是采用cygwin+gcc的方式,这样用户在Eclipse界面上编写程序,只需点一下鼠标就可以在后台用makefile进行编译,然后再给GDB加一个图形界面,这样就可以在Eclipse上进行图形化的调试了!!!!
你需要去理解一下如何在Eclipse建立自己的集成开发环境这方面的内容
|
通常嵌入式系统都是这样开发的,不过实际成熟的这样的为纯linux的交叉编译环境没有,为uClinux倒是挺多。可见大家都认为没有这样的必要。因为linux下成熟的IDE非常多,你只是不去尝试而已。比如eclipse,和anjuta。