2013-06-17 1 views
1

Был вопрос, как это здесь: How to build MinGW W64Как построить MinGW x64 на Windows,

Но без ответа.

Я сделал домашнее задание, прочитав mingw-w64-howto-build.txt, но он совсем не написан.

Здесь следует одна часть этого файла:

== Install the Mingw-w64 header set and create required symlinks == [HDRSYM]

Step 1) The source directory for the headers can be mingw-w64/trunk/mingw-w64-headers, or mingw-w64/mingw-w64-headers depending on your source.

Step 2) Create another "build" directory, and enter it. To install the headers, run: ../path/to/configure --build= \ --host=x86_64-w64-mingw32 --prefix=/mypath Then run "make install" to install the headers.

Что такое "префикс"? На какой путь я должен войти?

Step 3) GCC requires the x86_64-w64-mingw32 directory be mirrored as a directory 'mingw' in the same root. So, if using configure default /usr/local, type: ln -s /usr/local/x86_64-w64-mingw32 /usr/local/mingw or, for sysroot, type: ln -s /mypath/x86_64-w64-mingw32 /mypath/mingw

Как узнать, использую ли я по умолчанию? Где это должно быть «/ usr/local/mingw», если оно существует в моей системе? Что, черт возьми, «mypath» ?? Путь для чего? У меня есть MinGW, установленный в C: \ MinGW (тот, который должен использоваться для сборки этого x64). Это имеет какое-либо отношение к этим символьным ссылкам?

Step 4) Manually create the x86_64-w64-mingw32/lib directory: mkdir -p /usr/local/x86_64-w64-mingw32/lib or, for sysroot: mkdir -p /mypath/x86_64-w64-mingw32/lib If it already exists and you get an error, ignore it.

Для строчки? Что это значит?

Step 5) Symlink x86_64-w64-mingw32/lib directory as x86_64-w64-mingw32/lib64: ln -s /usr/local/x86_64-w64-mingw32/lib /usr/local/x86_64-w64-mingw32/lib64 or, for sysroot: ln -s /mypath/x86_64-w64-mingw32/lib /mypath/x86_64-w64-mingw32/lib64

Для строчки? Что это значит? # 2

я что-то на моей попытке, но результат таков:

configure: error: Please check if the mingw-w64 header set and the build/host option are set properly. configure: error: ../../mingw-w64-crt/configure failed for mingw-w64-crt

ответ

10

Я думаю, вы должны проверить в MinGWTDM64 если вы должны иметь минимальную Gnu-Windows 64-бит Gnu Compiler Collection. Если вы обеспокоены тем, что MinGW32 не подойдет вашим целям, вы, вероятно, дезинформированы (хотя я не могу быть уверен в том, что вы хотите сделать или даже это возможно). Но я обнаружил, что TDM (Дракон?) Сделал лучшую работу по поддержанию актуальности, чем сама организация mingw (по крайней мере, в последнее время).

Если вы не можете следовать вышеизложенному, мне представляется более подходящим для вас, потому что вышеприведенное является отражением стандарта FSSTND (файловой иерархии) для * nices. Средство настройки является частью GNU Build System (q.v. try Wikipedia), поэтому понимание этого требует знания того, где он рассчитывает найти, какие из исходных файлов на заранее определенных путях и где писать его целевые файлы. Это позволит вам настроить правильные файлы заголовков для вашей компиляции в вашей среде (или платформе, машине, ОС и т. Д.), Чтобы она создавала продукт (компилятор), который будет работать правильно для вас.

Поскольку Gnu's Un Unix (GNU) и Windows, разумеется, нет, создание компилятора из одного набора инструментов, который будет работать на любом из них, является сложным (прочитайте «breakable»). Построение компилятора - это не совсем первый шаг в карьере разработчика. Поэтому, если вы не готовы к бесконечному горе на пропитанной кровью тропе (если мне будет позволено немного сравнения), пожалуйста, юмористируйте меня, пока я предлагаю приобрести готовый пакет.

Отключил ли я вас еще? Нет, хорошо, не говори, что я не пытался. Важность инструментов сборки для вашей компиляции заключается в том, что из них построено configure.Существует очень часто набор установки инструкции (требование GNU), которые говорят что-то вроде «, чтобы построить этот пакет (скажем,„Hello, World“, чтобы сохранить его в довольно безопасном лагере), вы должны сначала запустить

$> ./configure

следуют

$> make 

это само по себе является грубым упрощением, так как может принимать различные параметры по типу и местоположению компиляторов вы собираетесь использовать, и где вы собираетесь установить продукт. Но, давайте не будем расходиться слишком много. Инструкции будут продолжены, чтобы сказать во многих из этих пакетов: «configure был построен с использованием автоматов s и др, но оно не должно быть необходимым для вас, чтобы восстановить его скомпилировать эту версию HelloWorld

ИМХО,„НЕ СЛЕДУЕТ“всегда должны быть капитализированы, наклонным, полужирный подчеркнул и повторяется как можно чаще. Очень часто единственный раз, когда не нужно восстанавливать конфигурацию, это когда у вас есть идентичная платформа (архитектура, процессор, ОС и среда) в качестве автора. Если вам повезет, и автор будет тщательным, вы будете иногда иметь чистый компилятор helloworld на машине с Windows, хотя автор изначально построил его на машине linux.

Одна из основных причин, по которой я рекомендую не создавать GCC (mingw32, 64 или любой другой вкус), заключается в том, что я не рекомендую вам пытаться понять autotools, не создав собственного дистрибутива GNU (даже если это просто практика). Ну, вы спрашиваете: «Если у меня еще нет компилятора, как я должен это делать?» Я могу понять ваше разочарование и даже поделиться им до определенной степени.

Если вы все еще хотите надеяться разместить этот комплект компилятора на компьютере под Windows самостоятельно (без использования MinGWTDM или тому подобного), вы должны сначала запустить его дома в среде Linux. Как только вы увидите, как работает сборка, это станет немного яснее. Тем не менее, я не вижу никакой возможности создать чистую компиляцию полного набора компиляторов (или даже компилятора C, действительно). Дэвид Малан в Гарварде преподает CS50 удаленно, используя виртуализованные среды, которые очень похожи и напоминают реальные установки. Это бесплатно, и он даже преподает C в процессе, что даст вам представление о параметрах компилятора (критически важных для построения в разных средах).

Если вы не хотите запускать виртуализацию или не получаете инструкции по созданию виртуальной машины (проще, чем просто создать компилятор, верьте или нет), вы можете установить какой-то бренд Linux где-нибудь. Я не рекомендую делать это на вашей машине Windows, несмотря на возможности двойной загрузки, потому что это может быть более разрушительным, чем создание компилятора или виртуальной машины.

Сделайте это и загрузите некоторые исходные пакеты Linux из Sourceforge (что-то очень рекомендуется - вам не нужны плохие сценарии конфигурации или сборки). Следуй инструкциям. Создайте их на Linux, а затем повторите процесс в Windows (вы можете сделать это с помощью 32-разрядного компилятора, если кто-то не скажет вам, что вы не можете [99,9% времени]).

Перейдите в один из уроков autotools/autoconf (а не на страницах руководства, сделайте это позже, чтобы выяснить, что упражнение означает подробно). Составьте вместе свой пакет helloworld, чтобы создать свой собственный configure, чтобы вы знали, что он делает. Сделайте это сначала под Linux, чтобы обеспечить большие шансы на успех, а затем «порт» для Windows. Слово мудрому - избегайте ничего с сигналами - они не реализованы под Windows, и я даже не уверен, что моя идея о том, как это сделать, даже сработает.

Сказав все это, я собираюсь сказать что-то еще более раздражающее: хотя mingw-w64-howto-build.txt не особенно хорошо написан, он не так плохо написан, как кажется глазу новичок. На самом деле, я бы сказал, что это было написано для чего угодно, кроме начинающей аудитории. Поскольку процесс создания компилятора из источника (особенно вне его исходного дома) не является тривиальным вопросом, я был бы удивлен, если бы вы могли найти любого, кто мог бы объяснить это вам, не используя большую часть того же словаря. Люди, которые делают подобные вещи, говорят друг с другом точно так же. Они часто выполняют гораздо более плохую работу, чем выше, за исключением случаев, когда речь идет о коде и создании сценариев.

Но для решения вашего первого вопроса, если вы не выбрали более достижимый подход, @[email protected] или то, что он сначала вызывает в сценарии, является своего рода «домашним деревом» (a) для источников сборки, (b) для целей построения и (c) для сборки. Unix была основана на MULTICS, которая является собственным напоминанием о том, что работа Билла Гейтса перед Microsoft работала над XENIX, причем все три были «многопользовательскими операционными» или «системами управления процессорами». Многопользовательский охватывает понятие нескольких учетных записей, нескольких ролей и нескольких деревьев сборки/установки.

Построение компилятора для себя - особенно там, где последняя часть сборки является процедурой установки - будет отличаться от ее создания для других пользователей той же машины. Давайте немного расширим это понятие: предположим, что вы не делаете это для себя и своих друзей - вы делаете это для своей компании или, скорее, «свою установку». Ваша установка в этом случае будет чем-то вроде базы, на которой вы развернуты: вам нужно не только беспокоиться о создании компилятора для вас и ваших друзей, у которых есть учетные записи на вашем компьютере, - вам нужно беспокоиться о его создании для своего босса, вашими операторами, вашими администраторами, вашими программистами, вашими дизайнерами - и еще кем-то, кому может понадобиться/нужен компилятор для выполнения своей работы. У вас может быть несколько типов компиляторов, которые должны сосуществовать, и тот, который вы используете для экспериментов, разработки, производства и тестирования, может быть разными версиями и версиями.

Сборка и установка деревьев будет иметь ряд общих черт. PREFIX пытается решить эту проблему. Когда я создаю свою небольшую песочницу, я использую префикс, который я настроил под названием ~/local. Это особое место для * nices. ~ является ярлыком для $ HOME или% home% в терминах Windows. Это лучшее место для вашей практики. Это не требует специальных разрешений, но могут быть некоторые ограничения на то, что там живет. PREFIX не решает все проблемы, но предоставляет инструментам конфигурации представление о том, где вы собираетесь внедрить дерево своей сборки и вашей установки. В терминах Дэвида Малана, если я собираюсь создать код в /home/jharvard/local/<product name>/src (и некоторые версии некоторых инструментов будут настаивать на полном пути, а не на обычном ярлыке ~/<product name>/src), мой PREFIX для компиляции песочницы будет или /home/jharvard/local и указан разумное стандартное соглашение об именах файловой системы, ваши исполняемые файлы (сгенерированные и/или существующие) будут находиться в ~/local/bin, ваши библиотеки будут в ~/local/lib, а ваши заголовки include будут в ~/local/include, пока вы просто играете с этим в своей собственной учетной записи. Как материал попал в эти каталоги? Вы все это построили. И вы могли бы заимствовать такие вещи, как заголовки, из источников, например, указанных в файле mingw-w64-howto-build.txt.

Некоторые инструменты, которые выживают в то время, распространяются на более широкую аудиторию пользователей: они идут в /usr/local/src /usr/local/bin /usr/local/lib /usr/local/include. , , Посмотрите PREFIX? Одна из проблем заключается в том, что для продвижения там вы должны быть разработчиком с разрешением на запись для этого пути - или ваш configure не будет работать (между прочим).

Некоторые инструменты имеют такую ​​область установки, что они не являются локальными: они могут быть скомпилированы с /usr/src to /usr/bin using /usr/lib and /usr/include - это еще один PREFIX.

В корне системы, где компилируются только боги, инструменты входят в/bin, если нет/sbin - эти поддеревья можно найти по всей системе на разных деревьях с разными целями - like /usr/local/experimental/src, /usr/bullpen/development/etc, /usr/production/bin.

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

Что касается по умолчанию, это значение по умолчанию - вы знаете, что используете по умолчанию, когда не используете что-то еще. На самом деле, он сказал вам, что такое дефолт, потому что он сказал вам: «Если вы используете configure default /usr/local», поэтому значение по умолчанию PREFIX равно /usr/local. Если вы ничего не использовать еще, что означает, что вы набираете

$>./configure

вместо

$>./configure --prefix=/home/veryambitious/local

и с несколькими успешными строит под пояс, инструкции, вы цитируете стало ясно, как грязь. Для sysroot, sysroot определяет, где mypath - вам нужно только беспокоиться о том, где вы хотите построить свой компилятор, установить его и запустить. Как я уже говорил ранее, ваша цель в том, чтобы это сделать (кроме того, чтобы иметь обновленную версию: есть намного более простые способы решения этой проблемы и получение последних исправлений). Если ваша цель - просто обновить собственный компилятор, я не могу думать о какой-либо причине сделать это в системном корне - где-то либо в верхней части иерархии, либо в точке монтирования, которую вы планируете вызывать системный корень. Когда я создаю с CMake (потенциальным конкурентом для GNU autotools, но не с продуктами GNU, в частности, не gcc), он указывает каталог установки по умолчанию как C:\Program Files\somewhere. Я уверен, что это стандарт для де-факто для кого-то.

Где ваш источник попадает на ваш компьютер, зависит от того, как вы его приобрели. Одна версия с «trunk» в пути будет svn-gcc, которая будет извлекаться из репозитория CMS subversion. Если у вас есть версия tarball, ваше дерево может быть другим. Дерево подрывной деятельности будет включать в себя множество вещей, которые вы не получили бы в «целевом архиве», как дерево сборки, которое уже настроено для вашей среды. Однако, поскольку он поддерживается для управления конфигурацией программного обеспечения, он будет поддерживаться часто с обновленными изменениями. Иногда инструментальные застройщики добавляют отдельные «рабочие снимки» для дублирования результатов определенной типичной среды.

Что касается символических ссылок, это действительно приятное имя для символической ссылки, которая, я не уверен, даже переводит на NT 4.0 в его воплощение Windows7. Символическая ссылка не является жесткой ссылкой в ​​том смысле, что она не играет сильной роли в определении inode или сущности файловой системы. Символьная ссылка - это легкая ссылка, которая может быть удалена и изменена без реального влияния на исходный файл. То, что автор говорит о создании gcc со ссылками на поддеревья * x86_64-w64-mingw32 *, состоит в том, что файлы, которые будут использоваться в вашей сборке, могут быть предоставлены общие псевдонимы, не создавая полностью разные поддеревья, чтобы их источник.

Ошибка конфигурации является одним из наиболее распространенных сообщений об ошибках ванили, которые говорят что-то, а не говорят ничего и оставляют вас, чтобы выяснить, что вам не хватает всего того, что вам нужно. Это означает: «Я не могу сказать вам, что пошло не так, но я не могу найти ничего, что мне нужно, чтобы начать читать и создавать файлы. Это должно быть странная среда, потому что я не вижу нигде читать или писать. Возможно, вы пропустили файлы заголовков - вы уверены, что поместили их в нужное место? Если нет, возможно, это машина, операционная система или среда, которые для меня не определены.«Это действительно происходит в реальной жизни, потому что люди создают кросс-компиляторы на одной машине, которые будут размещены на другой машине, или для кода, который будет размещен на другом компьютере. В этих случаях вам нужно будет добавить configure вариантов - -build = mybuild (пожалуйста, не спрашивайте меня, где это) и -host = myhost.

Обычно это просто означает, что вы делаете все это неправильно, и вам нужно следовать инструкциям по созданию gcc, который соответствует ваша вся конфигурация.Есть много способов сделать это - вы упоминаете MINGW, но это еще не все. Вам нужны внутренние функции, которые поступают из Windows API. Cygwin DLL включает в себя кучу из них - я не знаю Не знаю, работает ли кто-нибудь на этом. MSYS использует подобный подход, но не предоставляет полный набор cygwin. У вас нет системных подпрограмм UNIX, поэтому вам нужна замена - это может быть проще в Linux, чем в Windows.

Ваша цель будет создавать исполняемые файлы, которые будут запускаться с помощью MSVCRT (Microsoft Visual C Runtime), что является другой морщиной в стандартных результатах. Иногда даже если у вас есть последний GCC, MSVCRT еще не догнал. Иногда они просто предпочитают игнорировать стандарты, скажем, в параметрах размера строк преобразования формата - возможно, они думают, что вы должны настраивать потоки - кто знает?

Я предполагаю, что я буду отмечать это как сообщение сообщества, так как я уверен, что есть хороший шанс, что мне удалось набрать что-то в высшей степени глупо. Надеюсь, я пролил свет на то, как компиляция GCC на окнах не будет «из коробки». Я никак не мог покрыть все это, поэтому я просто усеял эту страницу подсказками.

+1

Из-за этого массивного ответа вы убедили меня просто загрузить и установить MinGWTDM64. Мой охват редко бывает флибустеристом x.x –

+1

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