Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
Проба создать динамическую библиотеку.
-
Пробую создать динамическую библиотеку. Версия Qt - 4.13.0. Библиотека компилится, всё ок, подключаю её к проекту - ошибки. Для теста использовал функции в которых реализация в заголовочном файле - на них компилятор не ругается. На те функции где реализация вынесена - показывает ошибки например: " undefined reference to `testReturn2(int)' "
Создавал библиотеку через Qt'шное "Создать файл -> библиотека C++ -> Динамическая -> ... "
Библиотеку подключал через Qt'шное "Добавить библиотеку..."Сыль на файлы.
Я пробовал и всё кидать в ту же папку в которой находится проект, и пробовал заголовочный к libdina_lib_USB.a переносить, всё также.
В gcc спокойно собирал и статические и динамические. а в Qt не осиливаю. по гайдам делаю и всё равно не понимаю.В чём дело может быть и чего делать с этим? Какой информации не хватает - напишите.
Немного строк из файлов:
dina_lib_usb.h :int testReturn0(int leet = 1337) {return leet;} int testReturn1(int leet = 1338); int testReturn2(int leet); int testReturn3() { int leet = 1339; return leet; } int testReturn4(int leet = 1340); int testReturn5();
dina_lib_usb.cpp:
int testReturn1(int leet) {return leet;} int testReturn2(int leet) {return leet;} int testReturn4(int leet) {return ++leet;} int testReturn5() { int leet = 1342; return leet; }
использующий библиотеку
main.cpp:#include <iostream> using namespace std; #include <dina_lib_usb.h> int main() { cout << "Hello test!" << endl; cout << testReturn0() << endl; cout << testReturn3() << endl; cout << testReturn2(228) << endl; cout << testReturn1() << endl; cout << testReturn1(229) << endl; cout << testReturn5() << endl; cout << testReturn4() << endl; return 0; }
use_lib_USB_programm.pro:
TEMPLATE = app QT += serialport core CONFIG += console c++11 CONFIG -= app_bundle #CONFIG -= qt SOURCES += \ main.cpp win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../compil_dina_lib_USB/release/ -ldina_lib_USB else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../compil_dina_lib_USB/debug/ -ldina_lib_USB INCLUDEPATH += $$PWD/../compil_dina_lib_USB/release DEPENDPATH += $$PWD/../compil_dina_lib_USB/release
dina_lib_USB.pro:
QT -= gui QT += serialport core TEMPLATE = lib DEFINES += DINA_LIB_USB_LIBRARY CONFIG += c++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ dina_lib_usb.cpp HEADERS += \ dina_lib_USB_global.h \ dina_lib_usb.h # Default rules for deployment. unix { target.path = /usr/lib } !isEmpty(target.path): INSTALLS += target
-
В виндовсе принято, что по-умолчанию все символы в dll явяляются скрытыми, и их надо явно экспортировать на стороне определения и импортировать на вызывающей стороне. Для этого можно использовать макросы Q_DECL_EXPORT и Q_DECL_IMPORT. См. https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application/ru
-
Если вопрос решен, закрывайте тему
-
@Konstantin-Tokarev said in Проба создать динамическую библиотеку.:
Если вопрос решен, закрывайте тему
Я ещё не проверил этот способ. Сегодня совсем никак не получилось. (
-
@Konstantin-Tokarev Да, всё заработало. нужно было прописать экспорты к функциям и классам у которых реализация в сипипишнике