Как я кросс-компилирую код C Windows для двоичного файла, который также будет выполнен на Unix (Solaris/HPUX/Linux)?

Ваша структура Test не имеет экспортированных полей / методов, то есть поля / методы в структуре, которые используются в шаблоне, должны начинаться с заглавной буквы.

Измените имя метода на CallMethod

func (t Test) CallMethod() float32 {
    return t.val1 / t.val2
}

и шаблон:

const tmpl = `
{{range .}}
   {{.CallMethod}}
{{end}}
`

см. Код https://play.golang.org/p / Vud7ipJ_Vyr

5
задан Community 23 May 2017 в 11:54
поделиться

7 ответов

Кросс-компилятор очень тверд установить и получить работу правильно.

Полагайте, что (люди в) NetBSD должны вставить огромный объем работы, чтобы заставить кросс-компиляцию работать, и они выполняют ту же ОС, просто различная архитектура.

Необходимо было бы, по крайней мере, скопировать все заголовки от другого OSs до Windows и получить кросс-компилятор, компоновщик и т.д. для целевой ОС/архитектуры.

Также это не может быть возможно - жемчуг и совместно использованные библиотеки могут быть скомпилированы с native/non-gcc компилятором, который не будет доступен в Windows вообще.

5
ответ дан 18 December 2019 в 13:19
поделиться

Скомпилируйте в Windows, затем используют Вино для выполнения их на любом *, отклоняют. Это работает хорошо большую часть времени.

1
ответ дан 18 December 2019 в 13:19
поделиться

Нет, это не возможно на двоичном уровне. Существует столько различий на двоичном уровне между различными Ose и центральными процессорами.

Но то, что можно сделать, делают источник расширений C совместимым так, чтобы он мог скомпилировать в различные платформы. C был разработан как "портативный ассемблер". Пока Вы придерживаетесь стандартных программ, которые являются межплатформенными, затем они будут обычно работать то же. Необходимо будет все еще протестировать, потому что могли быть ошибки, который существует на конкретной платформе.

-1
ответ дан 18 December 2019 в 13:19
поделиться

Это не может быть сделано..., но является этим так большая часть стычки для перекомпиляции кода в соответствии с Солярисом или HP?

-2
ответ дан 18 December 2019 в 13:19
поделиться

Я согласен с Дугласом , что получить кросс-компилятор и работать очень сложно. Как правило, это ваше последнее средство. Если вы выполняете загрузочную обвязку или делаете двоичный файл для встроенного устройства, то часто единственным вариантом является кросс-компиляция. Вам должно быть удобно компилировать свой собственный gcc под Cygwin, прежде чем рассматривать кросс-компиляцию. Для кросс-компиляции вам необходимо создать gcc для работы под Windows, но который будет создавать двоичные файлы для вашей платформы выполнения. Примеры инструкций для этого можно найти здесь .

Возможно, вы хотите выполнить кросс-компиляцию, потому что у вас нет root и / или вы не можете скомпилировать на вашей целевой платформе. Например, у меня был хостинг-провайдер, на котором работал Redhat Linux. Я мог запускать сценарии Perl CGI и связанные с ними модули, но я не мог скомпилировать на целевой машине, а созданные мной библиотеки должны были существовать в моем собственном каталоге.

Чтобы решить эту проблему, я мог бы попытаться выполнить кросс-компиляцию для моей целевой платформы, но вместо этого я решил настроить аналогичный хост внутри виртуальной машины в Windows. Из Cygwin вы можете создать скрипт, который будет использовать ssh в вашей виртуальной машине, копирует ваш исходный код и выполняет полную настройку / сборку. Последним шагом было развертывание бинарного артефакта в моей размещенной системе.

Я успешно запустил и Solaris 10, и Open Solaris на виртуальной машине под Windows. К сожалению, вам может быть труднее запустить HPUX под виртуальной машиной.

Я решил установить аналогичный хост внутри виртуальной машины в Windows. Из Cygwin вы можете создать скрипт, который будет использовать ssh в вашей виртуальной машине, копирует ваш исходный код и выполняет полную настройку / сборку. Последним шагом было развертывание бинарного артефакта в моей размещенной системе.

Я успешно запустил и Solaris 10, и Open Solaris на виртуальной машине под Windows. К сожалению, вам может быть труднее запустить HPUX под виртуальной машиной.

Я решил установить аналогичный хост внутри виртуальной машины в Windows. Из Cygwin вы можете создать скрипт, который будет использовать ssh в вашей виртуальной машине, копирует ваш исходный код и выполняет полную настройку / сборку. Последним шагом было развертывание бинарного артефакта в моей размещенной системе.

Я успешно запустил и Solaris 10, и Open Solaris на виртуальной машине под Windows. К сожалению, вам может быть труднее запустить HPUX под виртуальной машиной.

3
ответ дан 18 December 2019 в 13:19
поделиться

Почему бы вам не прочитать «Великий Объединенный Строитель» ( http://lilypond.org/gub/ и http: // valentin.villenave.info/The-LilyPond-Report-11 (раздел №4))

Я не знаю, как это работает, но GUB позволяет разработчикам Lilypond компилировать примерно для 11 платформ на Linux-боксе. .

2
ответ дан 18 December 2019 в 13:19
поделиться

(Это очень старый вопрос, но в нем отсутствует полезная информация - Я лично сделал это для Solaris (SPARC и x86), AIX, HP-UX и Linux (x86, x64). )

  • Получение кросс-компиляции C ++ намного сложнее, чем прямая C.

  • HP-UX 32-битный PA-RISC не поддерживается, потому что он использует формат SOM вместо ELF, а binutils не поддерживает (и, скорее всего, не будет когда-либо) поддерживают SOM. Другими словами, вы можете кросс-компилировать только 64-битный PA-RISC. (Требуется чип PA-RISC 2.0.)

  • Я бы пошел с mingw вместо cygwin, если вы можете. Cygwin вводит множество проблем с разрешениями файлов и зависимостей cygwin1.dll, которые могут быть неприятными. Однако, если возможно, используйте linux. Все будет намного быстрее, потому что все инструменты и сценарии, которые вы используете, разработаны для среды, в которой exec и stat являются быстрыми операциями. Windows + NTFS - это не та среда.

  • Начните со скрипта crossstools, но будьте готовы потратить на это много времени.

  • Сначала попробуйте установить самую последнюю версию gcc / binutuils, но если вы не можете решить проблемы, попробуйте вернуться к более старым пакетам. Например. для Power3 (AIX) кросс-компилятор серии gcc 4.x генерирует неверный код, 3.x в порядке.

  • При копировании собственных библиотек и заголовков убедитесь, что вы копируете с самой старой машины, на которой вы, вероятно, будете работать. Копирование новой библиотеки libc означает, что ваш код не будет работать ни на одной машине со старой libc.

  • При копировании собственных библиотек и заголовков вы, вероятно, захотите, чтобы 'tar -h' превращал символические ссылки в реальные файлы, также обратите внимание, что в Solaris некоторые необходимые объектные файлы crt находятся в каталоге cc, а не в / usr / lib

6
ответ дан 18 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: