Can not create/use DLL
-
Please confirm if guides under the link is still relevant
https://www.youtube.com/watch?v=ZewJ4iHQvXY
https://www.youtube.com/watch?v=9JTooLxhmC0
! Screenshot from 2023-09-26 02-25-15.png
-
Hi @JacobNovitsky, can you show us the contents of
MyLib.pro
anduseDll.pro
? -
Hi,
The Qt documentation has a page dedicated to that.
-
@Paul-Colby hi there :)
SGaist still, I could not find answer to my question :)
please guide me -
@JacobNovitsky please show the content of the files requested by @Paul-Colby.
-
@SGaist sorry, just woke up :)
TEMPLATE = lib
DEFINES += MYLIB_LIBRARYCONFIG += c++17
You can make your code fail to compile if it uses deprecated APIs.
In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES +=
mylib.cppHEADERS +=
MyLib_global.h
mylib.hDefault rules for deployment.
unix {
target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += targetuseDll.pro
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
#CONFIG -= qtQT += core
QT += gui
#QT += qapplication
QT += widgets quickSOURCES +=
main.cpp -
Hi @JacobNovitsky ,
Your
userDll.pro
file appears to be missing aLIBS +=
line that would be pointing the the build output of theMyLib.pro
file (ie the*.so
files).See the end of this page for some inspiration, ie this bit:
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../../projects/mylib/release/ -lmylib else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../../projects/mylib/debug/ -lmylib else:unix: LIBS += -L$$OUT_PWD/../../../projects/mylib/ -lmylib INCLUDEPATH += $$PWD/../../../projects/mylib DEPENDPATH += $$PWD/../../../projects/mylib win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/release/mylib.lib else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/debug/mylib.lib else:unix: PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/libmylib.a
Alternatively, since this seems to be a new project, I'd highly recommend you use cmake instead.
Cheers.
-
@Paul-Colby I need to make DLL for my project build with qmake, but thanks for pointing out
should I add to MyLib.pro lines below?
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../../projects/mylib/release/ -lmylib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../../projects/mylib/debug/ -lmylib
else:unix: LIBS += -L$$OUT_PWD/../../../projects/mylib/ -lmylib
INCLUDEPATH += $$PWD/../../../projects/mylib
DEPENDPATH += $$PWD/../../../projects/mylib
win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/release/mylib.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/debug/mylib.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/libmylib.a -
@JacobNovitsky said in Can not create/use DLL:
should I add to MyLib.pro lines below?
No, to userDll.pro as @Paul-Colby wrote
-
@jsulm great, ty
build folder
home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
source files folder
/home/supernova/MyLibI'm I correct:
"If I use Ubuntu, I can somehow ignore win32 lines and keep it as in asample -> rest to be amended EXACTlLY like that".win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../../projects/mylib/release/ -lmylib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../../projects/mylib/debug/ -lmylib
else:unix: LIBS += -L$$OUT_PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug -lmylib
INCLUDEPATH += $$PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
DEPENDPATH += $$PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/release/mylib.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../../projects/mylib/debug/mylib.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-DebugPlease confirm, big thanks in advance
-
@JacobNovitsky If you don't plan to build for Windows then you can remove all the win32 lines, but don't forget to alter other lines (like removing else:).
-
@jsulm is this correct?
LIBS += -L$$OUT_PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug -lmylib
INCLUDEPATH += $$PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
DEPENDPATH += $$PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
PRE_TARGETDEPS += $$OUT_PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-DebugNot sure If i need to include project source files, if need please advise where to include
-
@JacobNovitsky said in Can not create/use DLL:
Not sure If i need to include project source files
If you want to link against a pre build lib then of course you do not have to include the lib sources in the project which links against it.
-
just delete both projects and created new
pro:
QT -= gui
TEMPLATE = lib
DEFINES += MYLIB_LIBRARYCONFIG += c++17
You can make your code fail to compile if it uses deprecated APIs.
In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES +=
mylib.cppHEADERS +=
MyLib_global.h
mylib.hLIBS += -L$$OUT_PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug -lmylib
INCLUDEPATH += $$PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
DEPENDPATH += $$PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
PRE_TARGETDEPS += $$OUT_PWD/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-DebugDefault rules for deployment.
unix {
target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += targetcompile output:
:-1: error: No rule to make target '/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug', needed by 'libMyLib.so.1.0.0'. Stop.path correct, supernova@supernova-BOHB-WAX9:~/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug$ ls
libMyLib.so libMyLib.so.1.0 Makefile
libMyLib.so.1 libMyLib.so.1.0.0 mylib.oplease assist
-
any ideas how to fix that?
compile output:
:-1: error: No rule to make target '/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug', needed by 'libMyLib.so.1.0.0'. Stop. -
Remove
$$PWD
from the corresponding lines.Side question: are you going to use that library in any other project ?
-
@SGaist side question too :)
where can I read about QMAKE? -
In the qmake manual
-
Libtest.pro
QT = coreCONFIG += c++17 cmdline
You can make your code fail to compile if it uses deprecated APIs.
In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES +=
main.cppDefault rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetLIBS +=/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
INCLUDEPATH +=/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
DEPENDPATH +=/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug
PRE_TARGETDEPS +=/home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-DebugQT -= gui
TEMPLATE = lib
DEFINES += MYLIB_LIBRARYCONFIG += c++17
You can make your code fail to compile if it uses deprecated APIs.
In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES +=
mylib.cppHEADERS +=
MyLib_global.h
mylib.hDefault rules for deployment.
unix {
target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += target:-1: error: cannot find /home/supernova/build-MyLib-Desktop_Qt_6_2_4_GCC_64bit-Debug: file format not recognized
How to fix error above? There is still no DLL, if I comply with syntax, shall I get dll?