应该不可行,要看编译器能生成那些平台的目标代码,如果只支持windows平台,那么生成的始终是windows程序,剩下的也就不用解释了。
一班来说目标文件(.obj或.o)可以跨平台(仅指软件平台)的使用,最终的可执行程序或动态库,还要linker来完成。
但是编译出来的目标文件(.obj或.o)在PC机平台上还有实模式和保护模式的区别,另外不同编译器对段名和导出符号的命名也许不同(特别是C++中的函数名)。
许多朋友总是弄不清楚实模式和保护模式的区别,最大区别不是别的,而是寻址方式的不同。要记住保护模式下能够执行的指令,在实模式下几乎都能执行。实模式下,是通过段加偏移来寻址,而保护模式下的段寄存器存放的不是实际的地址,而是一个选择符。
7楼所讲的将DOS.h文件编译成dos.obj是绝对不可行的。dos.h文件中只是包含了函数声明等,并没有包含实际代码,编译成dos.obj也没有任何意义,因为生成的目标代码为零。
如果要解决这个问题,一般的思路是,先明确你要实现的功能,再看编译器所提供的支持。先看看编译器生成那些平台的目标代码,平台包括硬件平台,比如是x86的、ARM的、还是MIPS的。在看编译器能生成的目标文件格式,是OMF的,还是COFF的(OBJ文件也有很多标准的,有兴趣的可以看看)。然后再看,你的Linker能生成那些操作系统的可执行文件或动态库,比如DOS,还是Linux,还是windows。然后再看编译器提供了哪些库,一般C/C++的标准库肯定是有的,另外编译器一般都会提供很多的扩展库,比如TC的graphics。弄清楚编译器所支持的操作系统平台是非常关键的,因为操作系统为我们提供了太多东西,DOS下有int21h,windows下有WinAPI。
总之在学习和做开发之前,先要明确自己要实现的功能,然后再深入的理解平台。
最后再写上我总结的一句话:
软件开发,就是在已有平台上,深入的理解平台,然后最大限度的利用平台已经提供的功能,去实现平台没有实现,而你希望实现的功能。
[此贴子已经被作者于2007-4-6 10:05:50编辑过]