исходный код C ++ переносится в Linux, когда он успешно компилируется в Visual Studio 2010 - PullRequest
4 голосов
/ 26 ноября 2010

Я хотел бы использовать Visual Studio 2010 для создания C++ application, который в конечном итоге будет работать на Linux

Есть ли какие-либо проблемы совместимости / версии, о которых мне следует знать? Какой компилятор я должен использовать на Windows и на Linux?

Ответы [ 3 ]

6 голосов
/ 26 ноября 2010

Компилятор не важен, если вы используете стандарт C ++ и никаких специфичных для платформы расширений.Если вам нужны системные средства (сеть, файловая система ...), попробуйте использовать уровень абстракции, такой как boost .

4 голосов
/ 26 ноября 2010

Есть много вопросов, о которых вам нужно знать, к сожалению.Самое важное, как отмечали другие, заключается в том, что вы используете только стандартный C ++ и любые библиотеки, переносимые на все платформы, на которые вы ориентируетесь.Но есть и много других вещей, которые могут вас укусить, например, разные окончания строк (Windows использует \ r \ n, варианты Unix обычно используют \ n), разные размеры типов данных и т. Д. В целом, когда вы пытаетесь сохранить переносимость вещейвам также необходимо знать о таких вещах, как порядковый номер байтов, упорядочение байтов, способ работы различных файловых систем и т. д.

По сути, самое важное - это знать все системы, на которые вы ориентируетесь. Не пишите это на одной системе, а потом ожидайте, что сможете безболезненно скомпилировать ее на другой.Вместо этого скомпилируйте его на всех соответствующих системах с первого дня и убедитесь, что он продолжает работать на всех них, все время.Я рекомендую взглянуть на кроссплатформенную систему сборки, такую ​​как CMake (http://www.cmake.org) - это избавит вас от боли в моем опыте. Вы не хотите, чтобы на каждом этапе вам приходилось хранить файлы сборки для нескольких платформвремя, если вы можете помочь ему.

3 голосов
/ 26 ноября 2010

Используйте стандарт C ++. Старайтесь не использовать функции, зависящие от компилятора, такие как __int64 или внешние библиотеки для конкретной платформы, и все будет в порядке.

...