Как установить gsl на windows

Обновлено: 08.07.2024

Меня зовут Север (никаких шуток, так в паспорте и написано), и последние полтора года я занимаюсь frontend-разработкой. В мире разработки надо знать обо всех современных тенденциях, постоянно изучать новое, менять инструменты на более совершенные… Может ли Windows 11 оказаться таким инструментом?

Давайте попробуем разобраться: я установлю систему, поочёредно протестирую инструменты разработчика, которые она предлагает, и посмотрю, насколько сильно это всё отличается от аналогов в Windows 10.

Я из тех скучных ребят, которые долгое время считали, что нет системы лучше Windows 98, а Windows ME — игрушка дьявола. Прошли годы. Я успешно пересел на XP и держался до последнего, но 7 оказалась удобнее, чем я ожидал, затем перебрался на 8, и, наконец, встретился с 10.

Мне до сих пор кажется, что я к ней ещё не привык, а уже пришло время Windows 11! И что я делаю? Медлю. Боюсь нажать пару кнопок, поскольку тогда придётся встретиться с неизвестностью.


Часть моих опасений связаны также с тем, что новые инструменты для разработки могут оказаться слишком сырыми — как это случилось с долгожданным Cyberpunk 2077 от CDPR, к примеру, — и вместо ничем не омрачённого удовольствия от использования программного обеспечения я несколько часов потрачу на настройку и отладку багов.

Работаю я чаще всего на продукции Apple, а свой Asus обычно использую для игр, вёрстки дизайнов в Figma и рисования, но, быть может, новая система окажется удобнее для разработки? В конце концов, вице-президент Developer Platform Corporate Кевин Галло говорил, что «Windows 11 предназначена для всех разработчиков».

Прежде всего предлагаю разобраться в обновлённом инструментарии: он стал обширнее, интереснее, и основная его часть входит в базовую комплектацию системы, в отличие от Windows 10, в которой — во всяком случае, в старых версиях — даже Windows Terminal приходилось устанавливать отдельно. Стоит отметить, что большинство приложений теперь реально установить и на Windows 10, но функционал может несколько отличаться.

Я установил MinGW и MSYS в Microsoft Windows (64-разрядная версия) внутри каталога C:\MinGW (каталог MSYS - C:\MinGW\msys\1.0 ). Я загрузил последнюю версию пакета научной библиотеки GNU ( GNU GSL ) с официального ftp.

Я использовал MSYS для успешного выполнения configure и make , как описано в файле INSTALL в пакете GSL. Это означает, что в интерфейсе командной строки MSYS в каталоге MSYS home я вставил:

Это создает каталог local в каталоге MSYS ( C:\MinGW\msys\1.0 ), включая каталоги bin , include , lib и share .

Я успешно скомпилировал пример программы ( который вычисляет значение функции Бесселя $ J_0 (x) $ при $ x = 5 $) в соответствии с инструкциями в Руководство по GSL, автор:

Объектный файл связан с инструкции

Программа не может запуститься, потому что на вашем компьютере отсутствует libgsl-0.dll. Попробуйте переустановить программу, чтобы решить эту проблему.

Интересно, чего не хватает? Что нужно сделать, чтобы создать исполняемый файл?

4 ответа

Это не так просто. gcc запускается из командной строки LINUX в ​​оболочке bash. MinGW32-gcc запускается из командной строки DOS в оболочке cmd.exe. Динамическое связывание, необходимое для выполнения программы, которой требуется библиотека динамической компоновки (.dll в DOS или .so .la в Linux), также зависит от ОС. Динамические библиотеки Linux и динамические библиотеки Windows не взаимозаменяемы. Это ожидается; однако статические библиотеки, созданные gcc и ld в оболочке Linux bash, по-видимому, несовместимы с MinGW32-gcc в оболочке cmd.exe Windows, и это меня удивляет. Я не могу заставить MinGW32-gcc ссылаться на libgsl.a; Я продолжаю получать неразрешенные ссылки от ld. Я также не могу понять, как заставить GSL встраивать оболочку cmd.exe.

Исполняемый файл не запускается под Windows cmd , потому что библиотека Скомпилированная библиотека libgsl-0.dll отсутствует в системном или пользовательском пути. Windows делает не знаю, где это искать. Немедленное решение - сообщить системе где его найти, отредактировав переменную среды PATH, чтобы включить расположение libgsl-0.dll. Это можно сделать с помощью cmd , введя

В командной строке. (Я точно не помню, где оказалась библиотека, поэтому пожалуйста, простите меня за то, что я не стал конкретным.) Это будет длиться только во время сеанса, тем не менее, и чтобы сделать изменение постоянным, необходимо отредактировать переменную PATH с помощью через Панель управления. Один из способов доступа к переменным среды нажатием на "Расширенные настройки системы", которые можно найти слева в окно, открывающееся при нажатии на Панель управления-> Система и безопасность -> Система или щелкнув правой кнопкой мыши Компьютер в меню Пуск и выбрав Свойства. При нажатии на «Дополнительные настройки системы» открывается окно, в котором появляется кнопка «Переменные среды», и переменные среды становятся доступны по нажатию на эту кнопку. Однако, чтобы отредактировать PATH, я бы рекомендую использовать бесплатную утилиту PathEditor.exe, которую можно найти здесь. Эта утилита значительно упрощает процесс.

Однако ваша настройка сборки далека от оптимальной. С использованием Шаг .configure без каких-либо опций означает, что сгенерированные файлы будут быть установлен в C: \ MinGW \ msys \ 1.0 \ local и распространяться на несколько каталоги. Если вы хотите установить, удалить файлы будет сложно. более новая версия GSL после установки также другие библиотеки разработки. Я бы порекомендовал добавить опцию --prefix=C:/MinGW/gsl к шагу .configure . (Чтобы получить полный набор опций, запустите .configure --help .) Это упрощает установку. в случае необходимости, просто удалив или переименовав C: \ MinGW \ gsl. Кроме того, цель MSYS - облегчить создание программного обеспечения, ориентированного на для систем GNU, что не подходит для Windows. Программное обеспечение, когда-то созданное не должен находиться в MSYS, а где-то в C: \ MinGW и сделан доступный для инструменты сборки в C: \ MinGW \ bin, которые используются для сборки собственных программ Windows с помощью cmd или других подходящих инструментов Windows. На практике это означает, что --prefix=C:/MinGW следует всегда использовать, если MSYS требуется для ПО сборки для использования в MinGW, в данном случае файлы заголовков GSL и библиотеки. Однако по указанным причинам желательно выбрать --prefix=C:/MinGW/software .

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

Я нашел также частичное решение; но я точно не знаю, почему это работает!

С той же процедурой и конфигурацией, которые я первоначально упомянул в вопросе, если кто-то использует Windows cmd (CLI), а другой компилирует и связывает код C ( example.c ) с

Или код C ++ (эквивалентный example.c ) с

я установил MinGW и MSYS в Microsoft Windows (64bit), внутри каталога C:MinGW (каталог MSYS C:MinGWmsys.0 ). Я загрузил последнюю научную библиотеку GNU (GNU GSL пакета) от официальный ftp.

я использовал MSYS для выполнения configure и make успешно, как описано в INSTALL файл в пакете GSL. Это означает, что в командной строке префикса msys интерфейс, в префикса msys Я вставлено:

это производит local каталог в каталоге MSYS ( C:MinGWmsys.0 ), в том числе каталоги bin , include , lib и share .

я успешно скомпилировал пример программы (который вычисляет значение функции Бесселя $J_0 (x)$ при $x = 5$) в соответствии с инструкциями в руководство GSL, by

объектный файл связан, согласно - инструкции by

программа не может запуститься, потому что libgsl-0.dll отсутствует на вашем компьютере. Попробуйте переустановить программу устранение этой проблемы.

интересно, чего не хватает? Что нужно сделать, чтобы создать исполняемый файл?

когда вы строите проекты для MinGW, под MSYS, вы должны всегда указать до ./configure ; (the /usr/local default указывает конкретный путь MSYS,который полностью непригоден для разработки приложений MinGW). В вашем случае вы должны были настроить GSL таким образом:

или, еще лучше, отделите файлы сборки от источников (например, как подкаталог верхнего исходного каталога GSL):

это гарантирует что все библиотеки и заголовки, установленные пакетом, расположены в соответствующих каталогах, где MinGW может их найти, и, что более важно, где установленные DLL находятся %PATH% поиск, при запуске за пределами MSYS.

путем настройки, как вы сделали, когда вы впоследствии побежали

вы установили библиотеки и заголовки MinGW для использования MSYS (что неправильно), и в частности libgsl-0.dll будет установлен в C:/MinGW/msys/1.0/local/bin , тогда как он должны находиться в C:/MinGW/bin , (где последняя команда б установили его, следуя конфигурации с соответствующими --prefix=C:/MinGW спецификация).

Важная Сноска

вы должны отметить, что предыдущая процедура правильно подготовит GSL (или любую другую библиотеку, подготовленную аналогичным образом) для использования с MinGW и позволит вам запускать приложения, которые вы связали с такими библиотеками на вашем хост разработки (или на любом другом хосте с аналогичной установкой MinGW). Однако, если вы хотите распространять такие приложения (и при условии соблюдения любых условий лицензирования), чтобы они могли запускаться как самостоятельные приложения (т. е. без требования установки MinGW на компьютере конечного пользователя), вы должны позаботьтесь о том, чтобы зависимости времени выполнения были правильно удовлетворены в вашем дистрибутиве. Чтобы достичь этого, вы должны выбрать либо кому:

  1. ссылка на приложение статически. Это может быть уместно, если ваш дистрибутив ограничен одним или, возможно, двумя исполняемыми файлами, но быстро приведет к "исполняемому раздуванию", поскольку количество исполняемых файлов с общей зависимостью от библиотеки ядра увеличивается в пределах распространяемого пакета приложений. В последнем случае лучшим выбором было бы
  2. ссылка на приложение динамически, и распространять копии всех необходимых Dll, (кроме системных DLL), вместе с пакетом приложений; в этом случае вы не должны делать никаких предположений относительно макета каталога или %PATH% настройки, которые могут или не могут применяться на компьютере конечного пользователя; вы должны просто упаковать свой дистрибутив так, чтобы все доставленные исполняемые файлы и сопровождающие их библиотеки DLL были установлены в один и тот же.

Я нашел частичное решение, но я не знаю точно, почему это работает!

С то же самое процедура и конфигурация, которые я упоминал первоначально в вопросе, если используется Windows cmd (CLI) и один компилирует и связывает код C ( example.c ) С

или код C++ (эквивалентно example.c ) С

пожалуйста, поправьте меня, если я ошибаюсь.

исполняемый файл не запускается под windows cmd потому что библиотека libgsl-0.DLL вы составлены не по системе или путем пользователя. В Windows не знаю, где его искать. Немедленное решение-сообщить системе где его найти, отредактировав путь переменной среды, чтобы включить расположение libgsl-0.файл DLL. Это можно сделать с помощью cmd введя

в командной строке. (Я точно не помню, куда ведет библиотека. так прошу прощения, что не уточняю.) Это будет продолжаться только в течение сессии, хотя, и чтобы сделать изменение постоянным, необходимо отредактировать переменную PATH с помощью проходим через Панель управления. Один из способов доступа к переменным среды это, нажав на "дополнительные системные настройки", которые можно найти слева в окно в результате щелчка по панели управления - >Система и безопасность - >Система или щелкнув правой кнопкой мыши на компьютере в меню "Пуск" и выбрав Свойства. Нажатие в разделе "Дополнительные настройки системы" откроется окно, в котором появляется кнопка "Переменные среды", и переменные среды становятся можно нажав на эту кнопку. Чтобы отредактировать путь, я бы рекомендуем использовать бесплатную утилиту " PathEditor.exe", который можно найти здесь. Эта утилита делает процесс намного проще.

ваша настройка сборки далека от оптимальной. С помощью .configure шаг без каких-либо вариантов означает, что сгенерированные файлы будут быть установленным под C:\MinGW\msys\1.0\local и распространено над несколькими справочники. Будет трудно удалить файлы, если вы хотите установить более новая версия GSL после установки также другие разработка библиотек. Я бы рекомендовал добавить опцию --prefix=C:/MinGW/gsl к .configure шаг. (Для полного набора опций запустите .configure --help .) Это делает его очень легким получить установку в случае необходимости, просто удалив или переименовав C:\MinGW\gsl - . Кроме того, цель MSYS Is для облегчения создания программного обеспечения для систем GNU, которые не являются способом Windows. Программное обеспечение после сборки не должен находиться под MSYS, а скорее где-то под C:\MinGW и сделал доступный для инструменты сборки в C:\MinGW\bin которые используются для создания собственных программ Windows используя cmd или другие подходящие инструменты Windows. На практике это означает, что --prefix=C:/MinGW следует всегда использовать, если MSYS необходимо создайте программное обеспечение для использования в MinGW, как в этом случае файлы заголовков GSL и библиотеки. Предпочтительно, однако, по приведенным причинам выбрать --prefix=C:/MinGW/software .

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

Я установил MinGW и MSYS на Microsoft Windows (64 бит), внутри каталога C:\MinGW (каталог MSYS C:\MinGW\msys\1.0 ). Я загрузил последнюю версию GNU Science Library (GNU GSL) из официального ftp.

Я использовал MSYS для успешного выполнения configure и make , как описано в файле INSTALL в пакете GSL. Это означает, что в интерфейсе командной строки MSYS в каталоге MSYS home я вставил:

Это создает каталог local в каталоге MSYS ( C:\MinGW\msys\1.0 ), включая каталоги bin , include , lib и share .

Я успешно скомпилировал примерную программу (которая вычисляет значение функции Бесселя $J_0 (x) $при $x = 5 $) в соответствии с инструкциями в руководстве GSL,

Объектный файл связан в соответствии с инструкциями от

Программа не может запускаться, так как libgsl-0.dll отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы устранить эту проблему.

Интересно, чего не хватает? Что нужно сделать для создания исполняемого файла?

Когда вы создаете проекты для MinGW, в MSYS, вы должны всегда указывать аргумент --prefix для ./configure ; (параметр /usr/local по умолчанию задает конкретный путь MSYS, что совершенно не подходит для разработки приложений MinGW). В вашем случае вы должны настроить GSL таким образом:

или, еще лучше, отделить файлы сборки от источников (например, как подкаталог каталога верхнего источника GSL):

Это гарантирует, что все библиотеки и заголовки, установленные пакетом, находятся в соответствующих каталогах, где MinGW может их найти, и что более важно, когда установленные библиотеки DLL найдены при поиске %PATH% при работе за пределами MSYS.

Конфигурируя, как вы это сделали, когда вы впоследствии запустили

вы установили библиотеки и заголовки MinGW для использования MSYS (что неверно), и в частности libgsl-0.dll будет установлено в C:/MinGW/msys/1.0/local/bin , тогда как оно должно быть в C:/MinGW/bin (где последняя команда установила бы его после конфигурации с соответствующей спецификацией --prefix=C:/MinGW ).

Важная сноска

Следует отметить, что предыдущая процедура будет правильно подготовить GSL (или любую другую библиотеку, подготовленную аналогичным образом), для использования с MinGW и позволит вам запускать приложения, которые вы связали с такими библиотеками на своем хосте разработки, (или на любом другом хосте с аналогичной установкой MinGW). Однако, если вы хотите распространять такие приложения (и при условии, что вы выполняете какие-либо условия лицензирования), чтобы их можно было запускать как самостоятельные приложения (т.е. без требования, чтобы MinGW был установлен на компьютере конечного пользователя), вы должны заботиться о том, чтобы задержка времени выполнения была должным образом удовлетворена в вашем дистрибутиве. Для этого вы должны выбрать либо:

  • Свяжите приложение статически. Это может быть уместно, если ваш дистрибутив ограничен одним или двумя исполняемыми файлами, но быстро приведет к "исполняемому раздуванию" по мере увеличения количества исполняемых файлов с общей зависимостью базовой библиотеки в дистрибутивном наборе приложений. В последнем случае лучшим выбором будет
  • Динамически связывать приложение и распространять копии любых необходимых DLL (кроме системных DLL) вместе с набором приложений; в этом случае вы не должны делать никаких предположений относительно макета каталога или %PATH% параметров, которые могут или не могут применяться на машине конечного пользователя; вы должны просто упаковать свой дистрибутив, чтобы все поставляемые исполняемые файлы и их сопровождающие библиотеки DLL были установлены в один и тот же каталог.

Я нашел также частичное решение; но я точно не знаю, почему это работает!

С той же процедурой и конфигурацией, о которых я упоминал первоначально в вопросе, если один использует Windows cmd (CLI), а один компилирует и связывает код C ( example.c ) с

или код С++ (эквивалентный example.c ) с

Пожалуйста, поправьте меня, если я ошибаюсь.

Исполняемый файл не запускается под окнами cmd , потому что библиотека libgsl-0.dll, который вы скомпилировали, не находится на пути к системе или пользователю. Windows делает не знаю, где его искать. Непосредственное решение - рассказать системе где его можно найти, отредактировав переменную окружения PATH, чтобы включить расположение libgsl-0.dll. Это можно сделать, используя cmd , введя

Однако ваша настройка сборки далека от оптимальной. Используя .configure шаг без каких-либо параметров означает, что сгенерированные файлы будут быть установленным под C:\MinGW\msys\1.0\local и распространяться на несколько каталоги. Будет сложно удалить файлы, если вы хотите установить более новая версия GSL после установки также другие библиотек развития. Я бы рекомендовал добавить опцию --prefix=C:/MinGW/gsl к шагу .configure . (Для полного набора параметров выполните .configure --help .) Это упрощает процесс установки если нужно, просто удалите или переименуйте C:\MinGW\gsl. Кроме того, целью MSYS является содействие созданию целевого программного обеспечения для систем GNU, которые не являются способом Windows. Программное обеспечение, когда-то построенное не должен находиться под MSYS, а скорее где-то под C:\MinGW и сделан доступный для создавать инструменты в C:\MinGW\bin, которые используются для создания собственных программ Windows используя cmd или другие подходящие инструменты Windows. На практике это означает, что --prefix=C:/MinGW всегда следует использовать, если MSYS необходимо построить программное обеспечение, которое будет использоваться в MinGW, так как в этом случае заголовочные файлы GSL и библиотеки. Предпочтительно, однако, по указанным причинам выберите --prefix=C:/MinGW/software .

После установки программного обеспечения не забудьте отредактировать PATH, чтобы система может найти нужные библиотеки.

Это не так просто. gcc запускается из командной строки LINUX в ​​оболочке bash. MinGW32-gcc запускается из командной строки DOS в оболочке cmd.exe. Динамическая привязка, необходимая для выполнения программы, которая нуждается в динамической библиотеке ссылок (DLL в DOS или .so.la в Linux), также зависит от ОС. Динамические библиотеки Linux и динамические библиотеки Windows не являются взаимозаменяемыми. Это многого ожидает; однако статические библиотеки, созданные gcc и ld в оболочке Linux bash, по-видимому, несовместимы с MinGW32-gcc в оболочке cmd.exe Windows, и это меня удивляет. Я не могу заставить MinGW32-gcc ссылаться на libgsl.a; Я продолжаю получать нерешенные ссылки от ld. Я также не могу понять, как получить GSL для сборки в оболочке cmd.exe.

Посмотрите другие вопросы по меткам windows mingw linker-errors gsl или Задайте вопрос

Читайте также: