Nuestra compañía comprará una pieza grande y muy compleja de código fuente para comunicaciones satelitales. Está codificado en C ++ y codificaremos las adiciones a él, también en C ++, vinculando nuestro código con el código adquirido en una sola unidad ejecutable.
¡Suena bien!
¿Es necesario que utilicemos el mismo compilador y la misma versión del compilador que se utilizó para desarrollar el código adquirido?
Hablando en general, no, no es necesario. El propósito de C ++ es actuar como una abstracción sobre este tipo de cosas, por lo que un programa de C ++ bien escrito se compilará tan bien en su cadena de herramientas como lo hizo en el autor original, y el programa resultante tendrá el mismo resultado. El rendimiento puede variar, ya que los diferentes compiladores son buenos para diferentes cosas, pero el comportamiento fundamental del programa no debe cambiar.
Sin embargo, el software mal escrito puede depender de un comportamiento específico de la implementación, o incluso de un comportamiento indefinido. Puede hacer suposiciones sobre los tipos incorporados o sobre el endianness de la plataforma. Incluso un software bien escrito puede no tener más remedio que confiar en extensiones no estándar que no están disponibles en su cadena de herramientas elegida, o puede hacerlo porque simplemente no hubo necesidad de dedicar tiempo a agregar una capa de portabilidad dentro de la duración de El proyecto original.
En última instancia, deberá preguntar al autor / proveedor para qué está escrito el código fuente. Si afirman que está escrito específicamente en contra, por ejemplo, Visual Studio 2015, y requiere características de la API de Windows, probablemente debería seguir con eso. Pero si afirman que es portátil, C ++ estándar, utilice el compilador que desee. Asegúrese de que su acuerdo de compra incluya un acuerdo de soporte para que pueda obtener ayuda gratuita cuando resulte que el proveedor estaba mintiendo.
¿Es necesario que usemos la misma versión de C ++ que el código comprado? Si no está usando 2014, podríamos querer usar algunas de sus características, pero no si puede haber problemas al mezclar diferentes versiones.
Probablemente. Tal vez.
C ++ 03 es compatible con versiones posteriores en su mayor parte, por lo que, si el código es C ++ 03, es poco probable que tenga un problema. (Aunque algunos ajustes pueden ser necesarios).
Pero las características introducidas en C ++ 11 y C ++ 14 no son compatibles con versiones anteriores, por lo que si el proveedor utiliza, por ejemplo, las lambdas de C ++ 11, e intenta compilar su código en un compilador de C ++ 03, eso simplemente no funcionará.
En teoría, por supuesto, no debería importar, especialmente la versión del idioma, pero es concebible que las diferentes versiones del compilador generen diferentes códigos de objeto, lo que podría generar diferencias de tiempo, etc.
Absolutamente. Si el código se basa tanto en una implementación específica para obtener los resultados esperados, entonces es responsabilidad del proveedor ser responsable e informarle de ello. Como vivimos en el mundo real, recomiendo ser diligentes y preguntarles primero.
Y me haré eco de lo que otros han dicho: asegúrate de que tienes algún tipo de recurso de apoyo, de modo que si falsificaron alguna de las respuestas a estas preguntas (ya sea de manera intencional o de otro tipo) no acabes asumiendo el costo resultante .