我们公司将为卫星通信购买一个庞大而非常复杂的源代码。
它是用C++编码的,我们也将在C++中对其进行代码添加,将我们的代码与购买的代码链接到一个可执行单元中。
当然,从理论上讲,这并不重要,尤其是语言版本,但可以想象不同版本的编译器会生成不同的对象代码,可能会导致时间差异等等。
我们应该意识到什么?
发布于 2017-02-16 16:52:52
我们是否有必要使用相同的编译器和编译器版本来开发购买的代码?
那得看情况。
编译器生成针对ABI的代码。有些人正在使用普通的ABI (例如,如果我没有弄错,clang++和g++目标都被称为Itanium ABI),而且您应该--可能会有错误阻止您这么做--能够在同一个程序中使用来自这两个程序的对象代码(当然,假设您使用的是针对相同版本的ABI的版本)。编译器版本之间也是如此:有些人比其他版本更注意保持相同的ABI。显然,它们都需要在某个时候进行ABI更改,并且可能被迫以不兼容的方式这样做。显然,一些设置,如语言标准的选择,可能会对ABI的选择产生影响。
还有标准库的问题。编译器(或同一编译器的不同版本)本身可能使用相同的ABI,但是它们的标准库可能是不兼容的(一些像clang++这样的编译器可以在几个标准库中使用)。能否使它工作可能取决于在接口中使用的是什么。
换句话说,您必须挖掘并找到您所处的特定案例的信息。作为您应该查找哪种信息的起点和示例,这里是libstdc++提供的信息( g++使用的库,以及clang++在某些配置中使用的库)。
发布于 2017-02-16 18:43:29
我们是否有必要使用相同的编译器和编译器版本来开发购买的代码?我们是否有必要使用与购买的代码相同的C++版本?
这主要不是一个技术性问题。这是一个关于你在合同中写什么的法律问题。确保软件供应商向您提供了由他保证的在您的环境中可用的版本。否则,在使用不同的编译器、编译器版本或语言版本时,总会有一定的风险。
当您将组件或其部分作为封闭源购买时,这一点尤为重要。即使您的供应商保证您可以在当前的编译器环境中使用该组件,他是否保证如果您希望在将来切换到较新的编译器版本,他也会向您提供更新吗?如果您无法访问完整的源代码,那么您很可能无法自己解决任何兼容性问题。这就是为什么你不应该仅仅购买软件,还应该考虑与你的供应商的长期维护合同。
发布于 2017-02-16 20:56:17
我们公司将为卫星通信购买一个庞大而非常复杂的源代码。它是用C++编码的,我们也将在C++中对其进行代码添加,将我们的代码与购买的代码链接到一个可执行单元中。
听起来不错!
我们是否有必要使用相同的编译器和编译器版本来开发购买的代码?
一般说来,没有必要。C++的目的是作为对这类事物的抽象,因此一个编写良好的C++程序将在您的工具链上编译得和在原始作者的工具链上一样好,并且得到的程序也会有相同的结果。性能可能会有所不同,因为不同的编译器擅长不同的事情,但是程序的基本行为不应该改变。
然而,写得不好的软件可能依赖于特定于实现的行为,甚至是未定义的行为。它可能会对内置类型做出假设,或者对平台的功能做出假设。即使是编写得很好的软件也可能别无选择,只能依赖您所选择的工具链上无法使用的非标准扩展,或者它可能会这样做,因为根本不需要花费时间在原始项目的持续时间内添加可移植层。
最终,您需要询问作者/供应商编写源代码的目的是什么。如果他们声称它是专门针对Visual 2015编写的,并且需要Windows特性,那么您可能应该坚持这样做。但是如果他们声称它是可移植的,标准的C++,那么使用任何你喜欢的编译器。确保您的购买协议包括一个支持安排,以便您可以获得免费帮助时,它的供应商是谎言。
我们是否有必要使用与购买的代码相同的C++版本?如果它不使用2014年,我们可能想使用它的一些功能,但如果在混合不同版本时可能会出现一些问题。
可能吧。也许吧。
C++03在很大程度上是向前兼容的,因此,如果代码是C++03,那么您不太可能有问题。(尽管可能需要进行一些调整。)
但是C++11和C++14中引入的特性并不是向后兼容的,所以如果供应商使用C++11 lambdas,然后尝试在C++03编译器中构建它们的代码,那就无法工作了。
当然,从理论上讲,这并不重要,尤其是语言版本,但可以想象不同版本的编译器会生成不同的对象代码,可能会导致时间差异等等。
绝对一点儿没错。如果代码在很大程度上依赖于特定的实现来获得预期的结果,那么应该由供应商负责并通知您。因为我们生活在现实世界中,我建议你要勤奋,先问他们。
我要重复其他人所说的话:确保你有某种支持手段,这样如果他们歪曲了对这些问题的任何答复(不管是有意的还是其他的),你最终就不会承担由此产生的费用。
https://softwareengineering.stackexchange.com/questions/342386
复制相似问题