Nasza firma kupi duży i bardzo złożony fragment kodu źródłowego do komunikacji satelitarnej. Jest on kodowany w C ++, a my dodamy do niego dodatki, również w C ++, łącząc nasz kod z zakupionym kodem w jedną jednostkę wykonywalną.
Brzmi dobrze!
Czy konieczne jest, abyśmy korzystali z tego samego kompilatora i tej samej wersji kompilatora, której użyto do opracowania zakupionego kodu?
Mówiąc ogólnie, nie, nie jest to konieczne. Celem C ++ jest działanie jako abstrakcja tego rodzaju rzeczy, więc dobrze napisany program C ++ skompiluje się równie dobrze na twoim łańcuchu narzędzi, jak na oryginalnym autorze, a wynikowy program będzie miał taki sam wynik. Wydajność może się różnić, ponieważ różne kompilatory są dobre w różnych rzeczach, ale podstawowe zachowanie programu nie powinno się zmieniać.
Jednak źle napisane oprogramowanie może polegać na zachowaniu specyficznym dla implementacji lub nawet na niezdefiniowanym zachowaniu. Może przyjmować założenia dotyczące typów wbudowanych lub endianizmu platformy. Nawet dobrze napisane oprogramowanie może nie mieć innego wyboru, jak polegać na niestandardowych rozszerzeniach, które nie są dostępne w wybranym łańcuchu narzędzi, lub może to zrobić, ponieważ po prostu nie trzeba było tracić czasu na dodawanie warstwy przenośności w czasie oryginalny projekt.
Ostatecznie będziesz musiał zapytać autora / dostawcę, po co jest napisany kod źródłowy. Jeśli twierdzą, że jest specjalnie napisany przeciwko, powiedzmy, Visual Studio 2015 i wymaga funkcji Windows API, prawdopodobnie powinieneś się tego trzymać. Ale jeśli twierdzą, że jest przenośny, standardowy C ++, użyj dowolnego kompilatora, który ci się podoba. Upewnij się, że umowa zakupu zawiera umowę wsparcia, abyś mógł uzyskać bezpłatną pomoc, gdy okaże się, że sprzedawca kłamał.
Czy konieczne jest używanie tej samej wersji C ++ co zakupiony kod? Jeśli nie używa 2014, my może chcesz korzystać z niektórych funkcji, ale nie, jeśli nie mogą być pewne problemy z mieszania różnych wersjach.
Prawdopodobnie. Może.
C ++ 03 jest w większości kompatybilny z przyszłością, więc jeśli kod to C ++ 03, prawdopodobnie nie będzie problemu. (Chociaż niektóre poprawki mogą być wymagane.)
Ale funkcje wprowadzone w C ++ 11 i C ++ 14 nie są kompatybilne wstecz, więc jeśli dostawca użył, powiedzmy, lambda C ++ 11, a Ty spróbujesz zbudować ich kod w kompilatorze C ++ 03, który właśnie wygrał nie działa.
Teoretycznie oczywiście nie powinno to mieć znaczenia, szczególnie wersja językowa, ale można sobie wyobrazić, że różne wersje kompilatora będą generować różne kody obiektowe, co może prowadzić do różnic czasowych itp.
Absolutnie. Jeśli kod w dużym stopniu opiera się na konkretnej implementacji w celu uzyskania oczekiwanych rezultatów, to od dostawcy zależy odpowiedzialność i poinformowanie o tym. Ponieważ żyjemy w prawdziwym świecie, zalecam, aby być pilnym i najpierw zapytać ich.
I powtórzę to, co powiedzieli inni: upewnij się, że masz jakieś wsparcie, aby w przypadku fałszywej odpowiedzi na te pytania (umyślnie lub w inny sposób) nie poniosłeś wynikających z tego kosztów.