создать программу и установить программное обеспечение в сетевой файловой системе для разных компьютеров - PullRequest
0 голосов
/ 19 августа 2009

Несмотря на небольшой опыт, меня все еще смущает вопрос о том, необходимо ли устанавливать приложение и / или создавать программу C ++ или библиотеку C ++ в сетевой файловой системе, совместно используемой компьютерами, которые имеют разные версии Linux (например, CentOS выпуск 4.7, Ubuntu 8.10), возможно, другой бит (например, 32-битный, 64-битный) и разные версии компилятора (например, gcc / g ++ 3.4.6 20060404 (Red Hat 3.4.6-10), gcc / g ++ (Ubuntu 4.3.2-1ubuntu12) 4.3.2.), Чтобы исполняемые файлы или файлы библиотеки могли использоваться на этих разных машинах? Какие здесь принципы?

Например, в сетевой файловой системе у меня есть исполняемый файл, созданный из моей программы на C ++ под машиной с CentOS версии 4.7, x86_64 ad gcc / g ++ 3.4.6 20060404 (Red Hat 3.4.6-10). Я с удивлением обнаружил, что исполняемый файл можно использовать на другом компьютере с Ubuntu 8.10, x86_64 и gcc / g ++ (Ubuntu 4.3.2-1ubuntu12) 4.3.2. Также все общие библиотеки, которые я собрал на первой машине и которые использовал моя программа, не жалуются на ошибку, когда исполняемый файл запускается на второй машине. Я так волнуюсь, если запуск исполняемого файла, созданного на другом компьютере, даст надежные результаты?

Другой пример, я помню, исполняемый файл, построенный на 64-битной машине, не может работать на 32-битной машине. Но как насчёт того, чтобы запустить на 64-битной машине исполняемый файл, построенный на 32-битной машине? Как насчет файлов библиотеки C ++, созданных и используемых на разных битовых машинах?

Если возможно, не могли бы вы указать мне какую-нибудь ссылку, например, какую-нибудь веб-страницу, книгу, ... которые связаны с моими вопросами?

Спасибо и всего наилучшего!

1 Ответ

0 голосов
/ 19 августа 2009

Вам действительно нужно протестировать вашу программу на каждой конфигурации, чтобы быть абсолютно уверенным.

Обычно вы можете запускать 32-битные программы на 64-битных машинах, так что, возможно, вы сможете использовать только 32-битную версию.

Вы должны быть немного осторожны с тем, какая версия gcc использовалась на каждой платформе. Запуск программы, созданной с помощью gcc 4, на компьютере, операционная система и glibc которого были созданы с помощью gcc 3, может вызвать проблемы. Поэтому убедитесь, что хотя бы основные номера версий совпадают.

Очевидно, что если у вас разные архитектуры машин, например Sparc и AMD64, вам потребуются разные версии. Есть даже некоторые тонкие различия между Intel и AMD, поэтому не переусердствуйте с оптимизацией компилятора, и если ваша программа использует инструкции SSE (если вы не знаете, что это, значит, вы ее не используете), убедитесь, что Используемый вами набор SSE поддерживается всеми машинами.

Ключевыми проблемами здесь являются архитектура машины, доступность нужных библиотек и «ABI» или двоичный интерфейс приложения. ABI определяет, как ОС должна использовать машинные регистры и память для передачи информации между различными частями программы, например, как данные помещаются в стек для передачи аргументов функции. Известно, что ABI, используемый GCC, время от времени меняется, поэтому необходимо использовать совместимые версии.

Мне неизвестна книга или веб-страница, которая охватывает все эти вещи. Начните с документации для GCC и Binutils. И ничто не заменит хорошее тестирование.

...