gcc与diab编译器的兼容性问题

2025-12-17 23:19:33
推荐回答(1个)
回答1:

不好意思刚看到,不同编译器编译的结果不能链接到一起,理由主要有以下两方面:一是不同编译器可能对变量名做不同处理,主要针对c++,好像没有什么编译器对c语言的变量名改变,举个例子,假设c++中的变量test_var,用两种不同编译器编译完该结果可能是Diab_test_var和GCC_test_var成为不同的变量,那么对于连接器来说就是不同的变量怎么会链接到一起是吧。c好像不存在文件名问题,但是c会遇到第二个方面。第二个方面就是不同的编译器会提供一些内部函数比如*(乘以)这个操作在编译器里有定义,有具体的代码来实现,如果编译器不同实现的函数名不同,不会链接到一起。当然还有更复杂的原因,可能我也不太了解。这些是我的理解,可能不全,但是可以肯定的是,不同编译器编译的二进制文件不能链接到一起使用。
至于你说的BSP是风河提供的会不会不兼容的问题,是这样的。通常对于BSP中的c语言部分,无所谓兼不兼容,因为c语言要是ANSI标准的话所有的编译器都会支持。BSP中的汇编部分跟编译器相关,但也是格式上的问题。一般vxworks提供gcc版的bsp(提供不提供其他编译器的BSP我不清楚,因为我们用的是gcc),所以应该是兼容的。假如真的不提供,可以按照gcc汇编语法,把BSP中的函数和变量以及伪指令部分更改成符合GCC语法即可,整体的汇编不需要更改,这部分工作很小的应该不难。
我知道的就这些,希望能帮到你。