Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

[Solved] QFtp and qt5 linking problem



  • They have removed QFtp from qt5 and I've to download it and compile it myself.
    The project files for qftp:

    @TEMPLATE = subdirs

    module_qtftp_src.subdir = src
    module_qtftp_src.target = sub-src

    module_qtftp_examples.subdir = examples
    module_qtftp_examples.target = sub-examples
    module_qtftp_examples.depends = module_qtftp_src
    !contains(QT_BUILD_PARTS,examples) {
    module_qtftp_examples.CONFIG += no_default_install no_default_target
    }

    module_qtftp_tests.subdir = tests
    module_qtftp_tests.target = sub-tests
    module_qtftp_tests.depends = module_qtftp_src
    module_qtftp_tests.CONFIG = no_default_install
    !contains(QT_BUILD_PARTS,tests):module_qtftp_tests.CONFIG += no_default_target

    SUBDIRS += module_qtftp_src
    module_qtftp_examples
    # module_qtftp_tests \

    @

    project file in src:
    @
    TEMPLATE = subdirs

    SUBDIRS += qftp

    @

    and the qftp pro file:
    @
    load(qt_build_config)
    Template = lib
    TARGET = QtFtp
    CONFIG += static shared
    #CONFIG -= shared
    QT = core network

    MODULE_PRI = ../../modules/qt_ftp.pri
    MODULE = ftp

    load(qt_module)

    Input

    HEADERS += qftp.h qurlinfo.h
    SOURCES += qftp.cpp qurlinfo.cpp
    @

    This compiles and give me the dll I need. But the problem is when I want to use it in a project.

    I've got this in my project file:
    @
    #-------------------qtftp--------------------------
    QTFTP_PATH = ../3rdparty/qt5/qtftp
    CONFIG(debug, debug|release):QTFTPLIB = Qt5Ftpd
    CONFIG(release, debug|release):QTFTPLIB = Qt5Ftp
    INCLUDEPATH += $$QTFTP_PATH/src/qftp
    LIBS += -L$$QTFTP_PATH/lib
    -l$$QTFTPLIB

    #--------------------------------------------------
    @

    But after i run qmake it ads "500" to the lib and it gives me the following error

    c:/qt/qt5.1.1/tools/mingw48_32/bin/../lib/gcc/i686-w64-mingw32/4.8.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lQt5Ftpd500

    if i open the make.debug I can se that qmake rename the qt5ftp lib to qt5ftp500.



  • Is there a configuration that tells qt to append the version number? It explains the numbers but not how they got there.


  • Moderators

    Hi,

    What do you wish to do with QFtp? QNetworkAccessManager has taken over some of QFtp's functionality: http://qt-project.org/forums/viewthread/27981 Would that suit your needs?



  • I'm porting a program from qt 4.8 to qt 5.1 and it uses QFtp.


  • Moderators

    I see.

    Try subscribing to the "Interest mailing list":http://lists.qt-project.org/mailman/listinfo/interest and asking your question there -- Qt's engineers are active on that list and they'll have better inside knowledge about these compatibility modules.



  • the shared library QtFtp created a prl file. I added this file:
    @CONFIG -= create_prl@
    And now it works as expected.



  • Hello
    In my case i not seeing

    #include <QtFtp> or <QFtp>

    but only

    #include <QtFtp/QtFtpDepends>



  • I compiled qftp into a shared library and linked the main application to the library.

    this is the .pro file for qftp
    @load(qt_build_config)
    Template = lib
    TARGET = QtFtp
    CONFIG += shared
    CONFIG -= create_prl
    QT = core network
    CONFIG += no_install_prl
    MODULE_PRI = ../../modules/qt_ftp.pri
    MODULE = ftp

    load(qt_module)

    Input

    HEADERS += qftp.h qurlinfo.h
    SOURCES += qftp.cpp qurlinfo.cpp
    @



  • I have install QT 5.1.1
    download from git https://qt.gitorious.org/qt/qtftp

    extract to:
    C:\Qt\5.1.1\5.1.1\Src\qt-qtftp

    edit qftp.pro
    @
    load(qt_build_config)
    Template = lib
    TARGET = QtFtp
    CONFIG += shared
    CONFIG -= create_prl
    QT = core network
    CONFIG += no_install_prl
    MODULE_PRI = ../../modules/qt_ftp.pri
    MODULE = ftp

    load(qt_module)

    Input

    HEADERS += qftp.h qurlinfo.h
    SOURCES += qftp.cpp qurlinfo.cpp"@

    go to VC console.

    cd c:\Qt\5.1.1\5.1.1\Src\qt-qtftp\src\qftp
    qmake qftp.pro
    nmake
    nmake install

    after when I run examples from git qtftp i have this error

    C:\Qt\5.1.1\5.1.1\msvc2010_opengl\examples\network\qftp\ftpwindow.cpp:43: błąd:C1083: Cannot open include file: 'QtFtp': No such file or directory



  • I included qftp.h from library I build.



  • Could you point me step by step how to do this.
    I am a beginner programmer QT.

    I copy qftp.h and qurlinfo.h to ftp example project,
    and
    add to qftp.pro
    line HEADERS += qftp.h qurlinfo.h

    but when i run project i have many errors like:

    C:\Qt\5.1.1\5.1.1\msvc2010_opengl\examples\network\build-qftp-Desktop_Qt_5_1_1_MSVC2010_32bit_OpenGL-Debug\debug\moc_qftp.cpp:125: błąd:C2027: use of undefined type
    'QFtpPrivate'
    c:\qt\5.1.1\5.1.1\msvc2010_opengl\examples\network\qftp\qftp.h:51: see declaration of 'QFtpPrivate'
    ...

    first error go to
    case 9: _t->d->_q_startNextCommand(); break;



  • I can write more details about how to do this after work.



  • Hello
    It's work

    1. build source qt-qtftp
      qmake /Src/qt-qtftp/src/src.pro
      nmake
      nmake install

    after
    change in qt-qtftp/src/qftp/qftp.pro

    @ CONFIG -= static
    CONFIG += shared@

    and compile again

    in lib a have now
    c:\Qt\5.1.1\5.1.1\msvc2010_opengl\lib\Qt5Ftp.dll
    c:\Qt\5.1.1\5.1.1\msvc2010_opengl\lib\Qt5Ftpd.dll
    c:\Qt\5.1.1\5.1.1\msvc2010_opengl\lib\Qt5Ftp.lib
    c:\Qt\5.1.1\5.1.1\msvc2010_opengl\lib\Qt5Ftpd.lib
    c:\Qt\5.1.1\5.1.1\msvc2010_opengl\lib\Qt5Ftpd.pdb
    c:\Qt\5.1.1\5.1.1\msvc2010_opengl\lib\Qt5Ftp.prl
    c:\Qt\5.1.1\5.1.1\msvc2010_opengl\lib\Qt5Ftpd.prl

    1. create file in directory
      c:\Qt\5.1.1\5.1.1\msvc2010_opengl\include\QtNetwork
      QFtp
      and inside add
      @#include "qftp.h"@

    2. copy from source two file
      qftp.h and qurlinfo.h to includes\QtNetwork\

    3. in my project add
      @LIBS += Qt5Ftp.lib@
      and
      @QT += ftp@

    and project finaly build and run:) jupiiii


  • Moderators

    Thank you for sharing your solution!



  • Hello, I'm on Linux and I have the same problem. Compile the module as shared and static and in no way I can compile the examples. When you modified the .pro filedo not miss you put a -L parameter?



  • hi,
    doesn't fit 100% to the theme, but I have tried it according to the instructions, but with the Creator.
    The compilation works so far. However I have 3 problems:

    cd qftp\ && C:\Qt\5.14.0\mingw73_32\bin\qmake.exe -o Makefile C:\Qt\qt-everywhere-src-5.14.0\qtbase\src\qtftp\examples\qftp\qftp.pro -spec win32-g++ "CONFIG+=qtquickcompiler"
    Project ERROR: C:/Qt/qt-everywhere-src-5.14.0/qtbase/src/qtftp/examples/qftp/qftp.pro installs target to unexpected location.
    mingw32-make[1]: *** [Makefile:43: sub-qftp-qmake_all] Error 3
    mingw32-make[1]: Leaving directory 'C:/Qt/qt-everywhere-src-5.14.0/qtbase/src/build-qtftp-Desktop_Qt_5_14_0_MinGW_32_bit-Release/examples'
    mingw32-make: *** [C:/Qt/qt-everywhere-src-5.14.0/qtbase/src/build-qtftp-Desktop_Qt_5_14_0_MinGW_32_bit-Release/Makefile:71: sub-examples-qmake_all] Error 2
    

    i simply removed module_qtftp_examples
    I don't know if this is OK but now the compilation is running. And since they are only examples I think I should not have any problems.

    Cannot read C:/../../tests/auto/other/headersclean/headersclean.pri: No such file or directory
    

    i have no solution for this, but i don't know if my mistakes result from this.

    after compiling I only have the following files
    libQt5Ftp.a
    Qt5Ftp.dll
    Qt5Ftp.dll.debug

    but I still need
    libQt5Ftpd.a
    Qt5Ftpd.dll
    but they're not made, so can anyone help me?


  • Lifetime Qt Champion

    @Dacown
    Hi
    The names with d in the end - is normally the debug versions and
    you are building in release mode so why you think you also need them ?
    For debugging ?
    Try build in debug mode and see.



  • Hi,
    yes i think i need it for debugging, is that wrong ?
    OK i will try it.



  • OK,
    i just tried it:

    C:/Qt/Tools/mingw730_32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lQt5Ftpd
    collect2.exe: error: ld returned 1 exit status


  • Lifetime Qt Champion

    @Dacown
    Hi
    Did you build both things in Debug then ?



  • @mrjj
    I have compiled the QFtp once in release mode and once in debug mode.
    I only got the files in each case:
    libQt5Ftp.a
    Qt5Ftp.dll

    C:/Qt/Tools/mingw730_32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lQt5Ftpd
    collect2.exe: error: ld returned 1 exit status
    

    the error i get now is from a project that was running with QFtp before. i have now installed the latest QT version and wanted to include QFTP there again so i can continue using the project.
    I have tried to compile this project in debug modus


  • Lifetime Qt Champion

    @Dacown

    You get this error when you try to use the Qt5Ftp from your app right ?



  • @mrjj
    yes if i try to compile it.

    I have tried now to compile QFTP on a other system.
    There it works i get the 4 files.

    Now i have test to compile my project on this machine, i have the same error.


  • Lifetime Qt Champion

    @Dacown
    ok but if you get the dlls then
    just make sure you use the right version
    for the app.
    Release DLL for Release App
    and Debug Dll ( d in name) for Debug App
    Dont mix it.

    Also make sure the path you add to your pro file matches where you put the dll.



  • Have been trying to get QFtp to work myself for 2 days now, think I'll just go back to the stoneage for this one app and use a very old qt with FTP..

    Have been doing amazing things with Qt.. from 3D to automation control and sensing, but this one library will have me going nuts if I don't stop trying...

    Thumbs up to everyone being able to get a usable lib out of this :)


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    What issues are you getting ?



  • @SGaist

    Hello and thanks for the welcome :)

    First I had built a .lib with nmake and tried to include that, but i could not load any modules.
    Then I built a .a type lib, with mingw make and that would not let me load any modules either.

    I also added the qurlinfo and qftp cpp classes to my project but there was no change.
    So I gave up and removed all the linking in .pro etc.

    Today after seeing your post I included the .lib again, without removing the .a from the qtftp lib folder, also with the copied qurlinfo and qft in my project, now it actually seems to work when using it as release, the "d" libs have not been built(?).

    Only confirmation that I get that it might be working is this, maybe you can confirm if this only shows up if the modules/library are in working order or if they would show up anyway because of the included qurlinfo and qtftp classes?

    Code:

    QFtp ftp;
           ftp.connectToHost("ftp.host.no");
           ftp.login("username","pass");
           qDebug() << "Ftp:";
           qDebug() << ftp.state();
           qDebug() << ";FTP";
           ftp.close();
    

    Result

    Ftp:
    0
    ;FTP
    QIODevice::write (QTcpSocket, "QFtpPI_socket"): device not open
    

    If I add Qt +=ftp to .pro
    then it cannot find the module.

    Thanks

    ------- Edit -----

    I was tempted to try again, I ran qmake, mingw32-make and install, then did the changes in .pro with @ config, and ran make again,
    it has now provided dlls too. I add the library to my project with qt creator then i added ftp to my .pro, and that did not produce any fail, but it will only let me load QtFtp/QtFtpDepends?

    Also, only other change i have done other then adding @ at start and end of config, is when I had an error:
    fatal error: QtFtp/qurlinfo.h: No such file or directory
    #include <QtFtp/qurlinfo.h>

    when running the first make, so I went into src/qftp and changed in qftp.h
    #include <QtFtp/qurlinfo.h> to #include <qurlinfo.h> which solved it.
    don't know if it should have found another file which is in the mislocated folder QtFtp?

    if it is of any relevance, this is the qtftp I've downloaded https://github.com/qt/qtftp


  • Lifetime Qt Champion

    Did you ran make install after building ?



  • @SGaist

    yes i did,

    mingw32-make install
    cd src\ && ( if not exist Makefile I:\Qt\5.14.0\mingw73_64\bin\qmake.exe -o Makefile C:\Users\k\Downloads\qtftp-mas\qtftp\src\src.pro ) && mingw32-make -f Makefile install
    mingw32-make[1]: Entering directory 'C:/Users/k/Downloads/qtftp-mas/qtftp/src'
    cd qftp\ && ( if not exist Makefile I:\Qt\5.14.0\mingw73_64\bin\qmake.exe -o Makefile C:\Users\k\Downloads\qtftp-mas\qtftp\src\qftp\qftp.pro ) && mingw32-make -f Makefile install
    mingw32-make[2]: Entering directory 'C:/Users/k/Downloads/qtftp-mas/qtftp/src/qftp'
    copy /y ....\lib\Qt5Ftp.dll I:\Qt\5.14.0\mingw73_64\bin\Qt5Ftp.dll
    1 file(s) copied.
    I:\Qt\5.14.0\mingw73_64\bin\qmake.exe -install sed -e "s,C:/Users/k/Downloads/qtftp-mas/qtftp/lib,I:/Qt/5.14.0/mingw73_64/lib,g" -e "s,C:\\Users\\k\\Downloads\\qtftp-mas\\qtftp\\lib,I:\\Qt\\5.14.0\\mingw73_64\\lib,gi" ....\lib\pkgconfig\Qt5Ftp.pc > I:\Qt\5.14.0\mingw73_64\lib\pkgconfig\Qt5Ftp.pc
    copy /y ....\lib\libQt5Ftp.a I:\Qt\5.14.0\mingw73_64\lib\libQt5Ftp.a
    1 file(s) copied.
    I:\Qt\5.14.0\mingw73_64\bin\qmake.exe -install qinstall C:\Users\k\Downloads\qtftp-mas\qtftp\include\QtFtp\QtFtpDepends I:\Qt\5.14.0\mingw73_64\include\QtFtp\QtFtpDepends
    I:\Qt\5.14.0\mingw73_64\bin\qmake.exe -install qinstall C:\Users\k\Downloads\qtftp-mas\qtftp\mkspecs\modules-inst\qt_lib_ftp.pri I:\Qt\5.14.0\mingw73_64\mkspecs\modules\qt_lib_ftp.pri
    I:\Qt\5.14.0\mingw73_64\bin\qmake.exe -install qinstall C:\Users\k\Downloads\qtftp-mas\qtftp\mkspecs\modules-inst\qt_lib_ftp_private.pri I:\Qt\5.14.0\mingw73_64\mkspecs\modules\qt_lib_ftp_private.pri
    I:\Qt\5.14.0\mingw73_64\bin\qmake.exe -install qinstall C:\Users\k\Downloads\qtftp-mas\qtftp\lib\cmake\Qt5Ftp\Qt5FtpConfig.cmake I:\Qt\5.14.0\mingw73_64\lib\cmake\Qt5Ftp\Qt5FtpConfig.cmake
    I:\Qt\5.14.0\mingw73_64\bin\qmake.exe -install qinstall C:\Users\k\Downloads\qtftp-mas\qtftp\lib\cmake\Qt5Ftp\Qt5FtpConfigVersion.cmake I:\Qt\5.14.0\mingw73_64\lib\cmake\Qt5Ftp\Qt5FtpConfigVersion.cmake
    mingw32-make[2]: Leaving directory 'C:/Users/k/Downloads/qtftp-mas/qtftp/src/qftp'
    mingw32-make[1]: Leaving directory 'C:/Users/k/Downloads/qtftp-mas/qtftp/src'

    the resulting lib files i get is these

    libQt5Ftp.a
    Qt5Ftp.dll
    Qt5Ftp.dll.debug
    Qt5Ftp.prl

    .a is the one i link to, qt creator then adds this to the my project file

    win32:CONFIG(release, debug|release): LIBS += -LC:/Users/k/Downloads/qtftp-mas/qtftp/lib/ -lQt5Ftp
    else:win32:CONFIG(debug, debug|release): LIBS += -LC:/Users/k/Downloads/qtftp-mas/qtftp/lib/ -lQt5Ftpd
    else:unix: LIBS += -LC:/Users/k/Downloads/qtftp-mas/qtftp/lib/ -lQt5Ftp

    INCLUDEPATH += C:/Users/k/Downloads/qtftp-mas/qtftp
    DEPENDPATH += C:/Users/k/Downloads/qtftp-mas/qtftp

    edit/addon;
    exact process was;
    opening the qt 5.14 mingw command terminal

    then to run qmake, which creates the stash file.
    then i run mingw32-make after removing QtFtp/ from the include line in qftp.h,
    then i added @ before and after config in pro and built again (if not, there is no dlls built?)
    then i run the mingw32-make install
    then i add the library to my project via qt creator
    then ftp to Qt += in the .pro file (qt creator does not show any missing lib after project read anymore, so something is working)
    but still cannot find anything else then QtFtp\QtFtpDepends

    and if I add the qftp and qurlinfo to my project too, then i can load the QFtp class but not use it for anything it just gives me the debug:
    QIODevice::write (QTcpSocket, "QFtpPI_socket"): device not open
    and the state "0"

    anyway, I think that if it was actually loading all the QFtp modules then I would not need to have qftp and qurlinfo in my project folder, just have the link to the lib?... any idea?

    Glad that I still qualify for the indie package, because paying 5000$ each year to not even get a library or package installer is a pretty sick price... Was going to solve my problem with FTP not being availiable with just regular accessmanager put/get and use mysql for the "directory" listings, but turns out mysql is not availiable either... so only option seems to be having another computer/mcu running as a server with sqlite and then send & retrive the commands with udp/tcp.. which works, but is a pain and not efficient..

    Finally managed to get mysql working, so i can use that for handling directory and qurl and networkaccess to do the down&uploads.
    If someone feels like writing a up to date step by step for idiots manual on building the qftp lib i would be very happy..


Log in to reply