我们一般写好源程序后都要编译为.O文件或者.OBJ文件,这是一些包含01的机器码?
如果我写好一个工程后(仅有源文件和头文件),用不同的编译器编译后连接能得到想要的可执行文件吗?
如一工程有1.c、2.c、1.h、2.h,然后我用vc的编译器编译1.c依赖与1.h;用gcc编译2.c依赖于2.h
得到1.o和2.o;那么用vc或gcc连接1.o和2.o能不能的到和只用vc编译连接(或gcc)的能功相同的可执行程序。

解决方案 »

  1.   

    我们一般写好源程序后都要编译为.O文件或者.OBJ文件,这是一些包含01的机器码?
    .o和.obj都是二进制机器代码如果我写好一个工程后(仅有源文件和头文件),用不同的编译器编译后连接能得到想要的可执行文件吗?
    这是可以的 只要头文件和源文件中的变量和函数都是自己定义的没有用到平台提供的库函数或特殊变量定义方式
    标准C是通用的如一工程有1.c、2.c、1.h、2.h,然后我用vc的编译器编译1.c依赖与1.h;用gcc编译2.c依赖于2.h
    得到1.o和2.o;那么用vc或gcc连接1.o和2.o能不能的到和只用vc编译连接(或gcc)的能功相同的可执行程序。
    没见过VC生成的.o的文件 都是生成库文件后跨平台调用的在链接阶段时将.o文件汇集成一个可执行的二进制代码文件的
    对于MS和linux或unix平台 编译链接器的不同 即使生成了可执行程序 我想它的稳定性值得考虑
      

  2.   

    你的想法很好 一般都是跨平台库文件调用的 其实细想想 gcc只能生成动态库文件
    那么gcc的编译过程与vc的nmake过程有什么区别那?
    对MS平台编译器的活动的这部分知识是缺乏的