Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
ZiminAS1990
2 / 2 / 0
Регистрация: 27.07.2012
Сообщений: 31
#1

MinGW+MSYS - как грамотно пользоваться? - C++

11.08.2012, 20:42. Просмотров 3427. Ответов 2
Метки нет (Все метки)

Вопрос:
Добрый день, уважаемые форумчане!

У меня такой вопрос:
Пытаюсь собрать PostgreSQL под Windows, используя связку MinGW+MSYS. Раньше не пользовался MSYS, по сему вопрос от неопытности.
Итак, скачал исходники, запустил configure, процесс пошёл... и тут же возникает проблема отсутствия zlib. Её тоже скачал, собрал (благо там-то всё просто). Снова запускаю ./configure для PostgreSQL, но проблема остаётся. Оно и понятно - библиотека zlib лежит в специально отведённой для этих целей папке на D:/, и autoconf (ведь в MSYS эта программа используется?) там их искать и не пытается.
Конечно, про сборке PostgreSQL можно отказаться от zlib, но дело не в этом, хочется выяснить, как же указать где искать библиотеки и заголовочники?

В ./configure --help я нашёл только один флаг, который должен бы решить эту проблему:
--with-libraries=DIR - Looking for additional libraries in DIR
, однако вызов
./configure --with-libraries="D:/Develop/lib" ...
не исправил проблему.

Так же, добавил папку с библиотеками в PATH - на всякий случай, а вдруг? Тоже самое

В общем, надеюсь, что те кто часто собирает что-то из исходников под Windows, знают об этой проблеме и её решении.

Благодарю за ответы

Добавлено через пару часов
Ответ:
Кажется разобрался. Напишу сюда решение, мало ли кому пригодится.
Как я понял, при выполнении скрипта ./configure кроме всего прочего производится проверка присутствия в системе тех или иных библиотек (в моём случае, это zlib). Такая проверка осуществляется очень просто: для каждой библиотеки создаётся и собирается простейшая программа, и в случае, если ошибок нет, значит нужна библиотека есть, а если были ошибки (например, ошибка линковщика, или отсутствие заголовочников), значит библиотеки нет. Просто и эффективно.

Если заголовочники и библиотеки находятся не в стандартной директории (в моём случае, в D:/Develop/lib и D:/Develop/include), то при запуске ./configure необходимо передать ему ключ CFLAGS или CPPFLAGS, в зависимости от того, какой компилятор используется при сборке (например, gcc или g++ соответственно). В качестве значения для этого ключа нужно передать пути к заголовочникам и либам. В моём случае это была команда:

./configure CFLAGS="-ID:/Develop/include -Wl,-LD:/Develop/lib/"

Я использовал CFLAGS, а не CPPFLAGS, так как при сборке PostgreSQL используется gcc.
Значение ключа передаётся компилятору при сборке тестовых программ, и будет передаваться при сборке проекта после конфигурирования.
Ключ "-I" - это gcc ключ, который дополнительную директорию для поиска заголовочников.
Ключ -Wl означает, что все последующие после запятой ключи будут переданы из gcc линковщику.
Ключ -L - это уже ключ линковщика (ld), с помощью которого мы добавляем ещё одну директорию для поиска библиотек

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

Кстати, ещё одна штука: при сборке zlib из исходников с использованием CMake, собранная библиотека будет называться не libz (какую ищет ./configure у PostgreSQL), а libzlibstatic. Я просто переименовал её в libz и всё готово - PostgreSQL собрался под виндой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2012, 20:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос MinGW+MSYS - как грамотно пользоваться? (C++):

Научите пользоваться MinGW - C++
Здравствуйте, я новичок и только вчера скачал MinGW и установил. Но я ламер и не могу понять даже как запустить. Скажите как? буду очень...

Может ли MinGW x64 компилить приложения x32? Или нужно для этого отдельно ещё MinGW х32 качать? - C++
Просто решил поиграться с CodeLite.

Mingw-w64 MinGW TDM-GCC - C++
Всем привет. Хочу понять, существует ли принципиальная разница между Mingw-w64, MinGW и TDM-GCC? Какие плюсы/минусы у этих трех...

Как грамотно прорефакторить? - C++
У нас основное тело программы вынесено в класс, назовем его условно class MainProgram, в нем масса методов. Один из методов (назовем его...

Как грамотно организовать код? - C++
У меня есть программа, уже написанная, но я хочу всё переделать более грамотно. Как разбить программу на классы правильно с точки зрения...

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

2
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
12.08.2012, 00:34 #2
А почему не скачал инсталлятор? Что за необходимость была собирать из исходников?
У меня вот есть необходимость. Скинь, пожалуйста, исходники!
0
ZiminAS1990
2 / 2 / 0
Регистрация: 27.07.2012
Сообщений: 31
12.08.2012, 14:13  [ТС] #3
Цитата Сообщение от kravam Посмотреть сообщение
А почему не скачал инсталлятор? Что за необходимость была собирать из исходников?
У меня вот есть необходимость. Скинь, пожалуйста, исходники!
Мне нужно было собрать libpqxx.
Конечно, можно было не собирать PostgreSQL, а установить его, но я всё же собрал, так как хотелось:
  1. Чтобы и libpqxx и PostgreSQL были скопилированы одним компилятором
  2. Ради опыта Узнал много нового о том, как под виндой из исходников собирать - раньше никогда этого не делал.

А исходники ведь доступны, вот они:
http://www.postgresql.org/ftp/source/
Открываем папку с нужной версией и качаем архив
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2012, 14:13
Привет! Вот еще темы с ответами:

Как грамотно удалить элементы в векторе? - C++
for (vector<fileResult>::iterator p = listExp.begin(); p != listExp.end();p++) { if (p->select) listExp.erase(p); } делаю...

объясните грамотно как это работает - C++
1)int * arr = NULL; и int * arr = new int;(что означает new) 2)можно менять int * arr = NULL на int * arr = {0} или int * arr = 0

Как грамотно описать следующие команды - C++
Как правильно и грамотно описать в курсовой работе следующий код, который преобразует вещественное число для его представления в формате...

Как грамотно подключать заголовочные файлы? - C++
Как грамотно подключать заголовочные файлы? Можно ли их все собрать в stdafx.h а потом инклюдить там где они мне нужны? А то сейчас...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.