Установите Qt 5.2.1 и сделайте так, чтобы pkg-config распознал его.

Моя ОС (Ubuntu 12.04) поставляется с предварительно упакованными библиотеками Qt4 и другими соответствующими материалами. Но я хотел использовать последнюю версию vanilla Qt 5.2.1, я установил ее, и она работает нормально, предположим Я скомпилировал эту структуру, которая зависит от Qt.

Что мне нужно было сделать, так это добавить библиотеки Qt 5.2.1 в файл $LD_LIBRARY_PATH. Мой домашний путь Qt 5.2.1 - /opt/Qt5.2.1/5.2.1/gcc_64, и поэтому мой $LD_LIBRARY_PATH содержит /opt/Qt5.2.1/5.2.1/gcc_64/lib/opt/Qt5.2.1/Tools/QtCreator/lib для материалов, связанных с qtcreator)

Однако недавно я пытался скомпилировать последнюю octave gnu. Это configure скрипт ищет Qt cflags (т.е. флаги -l/-I/-L), вызывая pkg-config.

Я узнал, что pkg-config ищет соответствующие файлы .pc, чтобы получить точную информацию, связанную со всеми флагами компиляции/связывания. Моя система (Ubuntu) поддерживает список всех необходимых .pc местоположений файлов в /var/lib/dpkg/info/pkg-config.list. Но у меня нет переменной окружения $PKG_CONFIG_PATH в Ubuntu 12.04 (не знаю почему).

В моем недавно установленном Qt5 есть набор файлов .pc в папке /opt/Qt5.2.1/5.2.1/gcc_64/lib/pkgconfig/.

Итак, как заставить pkg-config распознавать библиотеки разработки во вновь установленной версии Qt 5.2.1?

Я знаю, что это можно решить, просто установив пакеты Qt4 -dev из репозитория Ubuntu, но я не хочу этого делать. Мне нужен ванильный Qt 5.2.1 для других целей.

ПРИМЕЧАНИЕ:

  • Я добавил путь /opt/Qt5.2.1/5.2.1/gcc_64/lib/pkgconfig/ в pkg-config.list, но pkg-config не обновляет флаги компиляции соответствующим образом.
  • Добавление пути (/opt/Qt5.2.1/5.2.1/gcc_64/lib/pkgconfig/) к $PKG_CONFIG_PATH также не работает.

Вот вывод скрипта настройки октавы.


person ramgorur    schedule 03.04.2014    source источник
comment
что следующая команда возвращает в вашей системе? pkg-config --exists --print-errors "QtCore" ? И возвращается ли он, когда вместо этого у вас есть QtGui и QtNetwork? Вызывает ли какой-либо из них ошибку?   -  person carandraug    schedule 19.04.2014
comment
Package QtCore was not found in the pkg-config search path. Perhaps you should add the directory containing 'QtCore.pc' to the PKG_CONFIG_PATH environment variable No package 'QtCore' found -- то же самое для QtGui и QtNetwork   -  person ramgorur    schedule 19.04.2014
comment
мой плохой, то, что у меня есть в моей машине, это Qt5Core.pc, Qt5Gui.pc и т. д. Позвольте мне проверить, добавив их к PKG_CONFIG_PATH, и я дам вам знать.   -  person ramgorur    schedule 19.04.2014
comment
мой ответ ниже решил вашу проблему? Теперь октава нормально строится? Кто-то проголосовал за это, но я не знаю, был ли это ты.   -  person carandraug    schedule 19.04.2014
comment
Нет необходимости ставить перед каждым заголовком вопроса тег — именно для этого и предназначено поле тегов. Если вы хотите упомянуть тему в заголовке, это нормально, но нет необходимости в специальном префиксе тега.   -  person BoltClock    schedule 06.05.2014
comment
@BoltClock, ну, мне просто интересно, как ты узнал, что я это делаю??   -  person ramgorur    schedule 10.05.2014


Ответы (2)


Эта проблема связана с тем, что Octave ищет QtCore.pc, QtGUI.pc и QtNetwork.pc, но Qt5, похоже, переименовал их в Qt5Core.pc, Qt5GUI.pc и Qt5Network.pc. Одним из решений является создание для них символических ссылок:

cd /opt/Qt5.2.1/5.2.1/gcc_64/lib/pkgconfig/
ln -s ./Qt5Core.pc ./QtCore.pc
ln -s ./Qt5GUI.pc ./QtGUI.pc
ln -s ./Qt5Network.pc ./QtNetwork.pc
cd octave_build_dir
export $PKG_CONFIG_PATH="/opt/Qt5.2.1/5.2.1/gcc_64/lib/pkgconfig/"
./configure # with fingers crossed

Я не уверен, почему причина изменения имени. Интересно, должен ли быть какой-то механизм, в котором неверсионные версии будут в $PKG_CONFIG_PATH, а изменение ваших настроек изменит ссылку на правильную версию.

Наконец, ваши config.log и config.status были бы полезнее, чем просто вывод configure. Упомянутые файлы будут содержать фактические команды и вывод вашей конфигурации.

person carandraug    schedule 19.04.2014
comment
да, configure теперь работает, по крайней мере, ваш хак дает флаги компиляции. Но плохая новость в том, что это error configure: WARNING: QAbstractItemModel::beginResetModel() not found -- disabling GUI - person ramgorur; 22.04.2014
comment
@ramgorur Я только что проверил, и в Qt 5.2 есть этот метод . Посмотрите в свой config.log точный тест, который не работает, из-за чего configure говорит, что метод не существует. - person carandraug; 22.04.2014
comment
похоже, что текущая версия octave не поддерживает компиляцию с Qt5+. savannah.gnu.org/bugs/ - person ramgorur; 24.07.2014

Ответ carandraug правильный, но мне не нужно было символически ссылаться на файлы .pc (Qt 5.9.5). Чтобы предотвратить удаление других адресов pkg-config, экспортируйте PKG_CONFIG_PATH, как показано ниже:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/Qt5.2.1/5.2.1/gcc_64/lib/pkgconfig/

И чтобы выполнить его при запуске и во всей системе (не нужно экспортировать в каждом терминальном сеансе), поместите эти строки в нижнюю строку в «.bashrc»:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/Qt5.2.1/5.2.1/gcc_64/lib/pkgconfig/
export PKG_CONFIG_PATH
person mohammads    schedule 23.05.2018