Допустим, работаю в Qt Creator. Есть проект qLibEx, то есть сама библиотека классов. При создании по шаблону lib описан класс QLibEx. Ну это не столь важно.
Создаю ещё один класс QLibExDD и реализую его одну функцию.
qLibEx.pro
Код:
QT -= gui
TARGET = qLibEx
TEMPLATE = lib
DEFINES += QLIBEX_LIBRARY
SOURCES += qlibex.cpp \
qlibexdd.cpp
HEADERS += qlibex.h \
qLibEx_global.h \
qlibexdd.h
qLibEx_global.h
Код:
#ifndef QLIBEX_GLOBAL_H
#define QLIBEX_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(QLIBEX_LIBRARY)
# define QLIBEXSHARED_EXPORT Q_DECL_EXPORT
#else
# define QLIBEXSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // QLIBEX_GLOBAL_Hqlibex.h
Код:
#ifndef QLIBEX_H
#define QLIBEX_H
#include "qLibEx_global.h"
class QLIBEXSHARED_EXPORT QLibEx {
public:
QLibEx() { }
};
#endif // QLIBEX_H
qlibexdd.h
Код:
#ifndef QLIBEXDD_H
#define QLIBEXDD_H
#include "qLibEx_global.h"
#include <iostream>
class QLIBEXSHARED_EXPORT QLibExDD
{
public:
QLibExDD();
void showf();
};
#endif // QLIBEXDD_H
qlibexdd.cpp
Код:
#include "qlibexdd.h"
QLibExDD::QLibExDD()
{
}
void QLibExDD::showf()
{
std::cout << "FUCKFUCKFUCK" << std::endl;
}
Создаю ещё один проект, который использует эту библиотеку.
Бросаю скомпилированную libqLibEx.so.1.0.0 и все её симлинки в дирректорию с проектом.
qtestLib.pro
Код:
QT -= gui
TARGET = qtestLib
CONFIG += console
CONFIG -= app_bundle
LIBS += -llibqLibEx
INCLUDEPATH += .
TEMPLATE = app
SOURCES += main.cpp
main.cpp
Код:
#include <QtCore/QCoreApplication>
#include <qlibex.h>
#include <qlibexdd.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QLibExDD s;
s.showf();
return a.exec();
}
Не совсем понятно, что именно писать в .pro в секции LIBS. Линкер ругается:
Код: Выделить всё
Running build steps for project qtestLib...
Starting: /usr/bin/make clean -w
make: Entering directory `/home/skywarp/src/workspace_cpp/qtestLib'
rm -f main.o
rm -f *~ core *.core
make: Leaving directory `/home/skywarp/src/workspace_cpp/qtestLib'
Exited with code 0.
Configuration unchanged, skipping QMake step.
Starting: /usr/bin/make -w
make: Entering directory `/home/skywarp/src/workspace_cpp/qtestLib'
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4 -I. -I. -o main.o main.cpp
g++ -Wl,-rpath,/usr/lib64/qt4 -o qtestLib main.o -L/usr/lib64/qt4 -llibqLibEx -lQtCore -L/usr/lib64 -L/usr/lib64/qt4 -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -llibqLibEx
collect2: ld returned 1 exit status
make: *** [qtestLib] Error 1
make: Leaving directory `/home/skywarp/src/workspace_cpp/qtestLib'
Exited with code 2.
Error while building project qtestLib
When executing build step 'Make'В книгах по Qt читал, там ещё пишут про extern "C", как использовать это с классами? Дальше там идёт про плагины, а про либы так и не раскрыто полностью. Метод с QLibrary не особо хочется использовать. Библиотеки ни разу не создавал ещё.
p.s.: жаль тут нет тега, который свёртывает содержимое.