我在 C 中进行嵌入式开发。
我已经读过,在分布式系统中,您应该为不同的节点使用相同的编程语言,或者准备好协调传输数据中的不同数据类型。
是否有针对不同设备使用不同工具链的警告标志?如果是这样,工具链的哪些部分应该是相同的?
我在 C 中进行嵌入式开发。
我已经读过,在分布式系统中,您应该为不同的节点使用相同的编程语言,或者准备好协调传输数据中的不同数据类型。
是否有针对不同设备使用不同工具链的警告标志?如果是这样,工具链的哪些部分应该是相同的?
无论如何,您可能应该为此做好准备。这不是一个新问题——例如,这就是我们在网络上使用 bigendian 数据的原因——并且已经准备好执行此操作的工具,例如 DCE、MPI 或 CORBA。
即使您在双方都使用相同版本的 GCC,它也不会消除架构差异,例如字节顺序、可用数据大小(long 可能是 64 位,int 可能是 16 位 - 对于固定大小,请使用 stdint.h)等. 使用不同的工具链通常无关紧要,因为上面提到的平台和 ABI 差异都存在。
也就是说,当您为多个平台编译程序时,您可能会遇到诸如标准合规性和想要匹配的新功能之类的事情,而获得相同的工具链是实现它的一种简单方法。这首先是 GNU 背后的驱动力之一,因为非自由供应商有时不仅跟不上,当他们跟上时,他们想要钱。通常也以强迫您更换机器的形式出现。
将自己锁定在一个工具或工具链上没有多大意义,因为在应该能够与其他人通信的分布式系统中,无论如何您都必须考虑通信协议和数据表示。例如,即使您使用相同的工具链,目标架构也可能具有不同的内部数据表示,例如字节序,软件必须处理好这一点。
我建议设计不依赖于目标系统架构或特定工具链的通信协议。这样,当需求发生变化时,您就可以省去重新设计系统的麻烦(即,可能必须添加另一个目标架构,该架构的二进制数据表示与“常规”架构不兼容,或者可能需要一些特殊工具)。