#qt
#qt
Вопрос:
Я пытаюсь создать две библиотеки: одну статическую и одну общую. Проблема в статической библиотеке. У меня есть следующие папки:
src/
db/
dbal.h
dbal.pro
dll/
Distribution.h
dll.pro
project.pro
база данных статична, а DLL является общей
Distribution.h:
#ifndef DISTRIBUTION_H_
#define DISTRIBUTION_H_
#include <QtCore/QtGlobal>
#if defined(BUILDING_DLL)
#define DLL_FUNCTION Q_DECL_EXPORT
#else
#define DLL_FUNCTION Q_DECL_IMPORT
#endif
#endif /* DISTRIBUTION_H_ */
Теперь вот файл внутри db /, который включает Distribution.h
dbal.h
#ifndef DBAL_H_
#define DBAL_H_
#include "Distribution.h"
...
#endif
db.pro:
TARGET = db
TEMPLATE = lib
CONFIG = staticlib c 11
QT = core
INCLUDEPATH = ../dll
HEADERS = dbal.h
HEADERS = dbal_sqlite.h
SOURCES = dbal.cpp
SOURCES = dbal_sqlite.cpp
######################################################################
# Build to custom directories
######################################################################
DESTDIR = ../../build/debug/db
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
Когда я запускаю make в db / folder, я получаю следующую ошибку: QtCore / QtGlobal: нет такого файла или каталога. Также кажется, что отсутствуют команды -I.
Вот мой журнал:
make all
cd src/db/ amp;amp; ( test -e Makefile || /usr/lib/x86_64-linux-gnu/qt5/bin/qmake /mnt/record/_dev/linux/projects/cdt/wasp/src/db/db.pro -o Makefile ) amp;amp; make -f Makefile all
make[1]: Entering directory `/mnt/record/_dev/linux/projects/cdt/wasp/src/db'
g -c -m64 -pipe -O2 -std=c 0x -I/usr/share/qt5/mkspecs/linux-g -64 -I. -I../dll -o ../../build/debug/db/.obj/dbal.o dbal.cpp
In file included from dbal.h:9:0,
from dbal.cpp:3:
../dll/Distribution.h:4:27: fatal error: QtCore/QtGlobal: No such file or directory
#include <QtCore/QtGlobal>
^
compilation terminated.
Комментарии:
1. Какая у вас версия Qt?
2. Ты пробовал
#include <QtGlobal>
?3. Да, никакой работницы. Включение QtCore / QtGlobal работает, когда я запускаю makefile внутри dll /, но оно не работает, когда я добираюсь до makefile в db/
4. Обычно я не компилирую в g , но разве ваши пути -I не должны включать путь включения корня Qt? qt5/mkspecs не содержит заголовков Qt
5. Да, так и должно быть. Как вы думаете, это из-за того, что я пытаюсь скомпилировать статическую библиотеку, что qmake не включает пути включения Qt?
Ответ №1:
Обратите внимание, что журнал:
g -c -m64 -pipe -O2 -std=c 0x -I/usr/share/qt5/mkspecs/linux-g -64 -I. -I../dll -o ../../build/debug/db/.obj/dbal.o dbal.cpp
показывает, что включает пути, предоставленные для g , и не включает путь к QtCore/QtGlobal
.
Решение заключается в том, что файлу .pro необходимо
CONFIG = staticlib c 11
быть измененным на:
CONFIG = staticlib c 11
В частности, CONFIG = ...
строка удалила qt
элемент из конфигурации, таким образом, ваш проект не включал и не связывал файлы Qt.
Ответ №2:
Проблема заключалась в следующей строке:
CONFIG = staticlib c 11
Исправление изменяет его на:
CONFIG = staticlib c 11
По-видимому, без оператора = я переопределял необходимые значения переменных конфигурации Qt по умолчанию.