Компиляция программы C на OS X для запуска на Linux - PullRequest
4 голосов
/ 09 августа 2011

У меня есть довольно простая программа на C, которая выполняет некоторые криптографические вычисления, используя только стандартные библиотечные функции.

Я буду запускать программу в Ubuntu (10.04, 32 бит) и скомпилировать ее в OS X 10.6, используя cc с флагом -m32. Когда я попытался запустить его в Ubuntu, я получил сообщение об ошибке «невозможно выполнить двоичный файл».

Когда я компилирую его в Ubuntu, он работает нормально.

Есть ли простой способ скомпилировать код на OS X в двоичный файл, который будет работать на Ubuntu? Если нет, то какие различия приводят к несовместимости двоичного файла?

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

Вам необходимо установить кросс-компилятор. Используя цепочку инструментов GNU, процесс выглядит примерно так:

  1. Загрузка binutils , gcc и glibc .
  2. Untar bintuls (что-то вроде binutils-x.y.z).
  3. mkdir binutils-linux
  4. cd binutils-linux
  5. .. / binutils-x.y.z / configure --target = i386-ubuntu-linux (не уверен в точной цели)
  6. сделать
  7. sudo make install
  8. кд ..
  9. untar gcc (что-то вроде gcc-x.y.z).
  10. mkdir gcc-linux
  11. cd gcc-linux
  12. .. / gcc-x.y.z / configure --target = i386-ubuntu-linux (не уверен в точной цели)
  13. сделать
  14. sudo make install
  15. кд ..
  16. untar glibc (что-то вроде glibc-x.y.z)
  17. mkdir glibc-linux
  18. cd glibc-linx
  19. .. / glibc-x.y.z / configure --target = i386-ubuntu-linux (не уверен в точной цели)
  20. сделать
  21. sudo make install
  22. кд ..

Я никогда не пробовал OSX в качестве хост-ОС, поэтому я не знаю, есть ли другие сложности, но это общий подход. Я работаю по памяти, поэтому добавьте комментарий, если вам нужна дополнительная помощь.

1 голос
/ 09 августа 2011

Боюсь, вы не можете дать минимальную переносимость gcc.

Конечно, вы можете создать кросс-компилятор , например, , но я предлагаю вам использовать и компилировать с виртуальной машиной Ubuntu.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...