Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct


    Qt World Summit: Early-Bird Tickets

    Linking external static library in Qt creator - executable keeps trying to find .so

    Installation and Deployment
    2
    6
    3649
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      EscapedFromALab last edited by

      I made a Qt Project with two sub-projects. One is a static library, the other is the GUI app that uses the static library.

      Since this is a sub-project project I have specified the order in which the two parts are built. Starting with the static library in the project tree and then the app in the project tree. Done with the CONFIG+=ordered option.

      I also require a third external static library. Which is in a separate directory on my system. This library can be used statically or dynamically.

      Normally to use this third external library with g++ you'd do:

      @g++ biohello.cpp
      -o biohello
      --static
      -I$bpp_dir/include
      -L$bpp_dir/lib
      -lbpp-seq -lbpp-core
      strip biohello@

      for static compilation or for dynamic:

      @g++ biohello.cpp
      -o biohello
      -I$bpp_dir/include
      -L$bpp_dir/lib
      -lbpp-seq -lbpp-core@

      I'd like to include the library statically.
      I've tried using the add library wizard of Creator which resulted in the addition of:
      @win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/release/ -lbpp-seq
      else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/debug/ -lbpp-seq
      else:unix: LIBS += -L$$PWD/../../local/bpp/dev/lib/ -lbpp-seq

      INCLUDEPATH += $$PWD/../../local/bpp/dev/include
      DEPENDPATH += $$PWD/../../local/bpp/dev/include

      win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/release/libbpp-seq.a
      else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/debug/libbpp-seq.a
      else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/release/bpp-seq.lib
      else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/debug/bpp-seq.lib
      else:unix: PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/libbpp-seq.a

      win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/release/ -lbpp-core
      else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/debug/ -lbpp-core
      else:unix: LIBS += -L$$PWD/../../local/bpp/dev/lib/ -lbpp-core

      INCLUDEPATH += $$PWD/../../local/bpp/dev/include
      DEPENDPATH += $$PWD/../../local/bpp/dev/include

      win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/release/libbpp-core.a
      else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/debug/libbpp-core.a
      else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/release/bpp-core.lib
      else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/debug/bpp-core.lib
      else:unix: PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/libbpp-core.a@

      To the .pro files, hitting run makes the app run fine, but when I leave Creator and try to start the executable from my desktop or command line I'm told:

      @error while loading shared libraries: libbpp-seq.so.9: cannot open shared object file: No such file or directory@

      I haven't - to my knowlege, tried to include any shared objects, what I'm looking to do is include the external library statically using Qt Creator to the same result as you would with the g++ snippet above.

      Thanks,
      Ben W.

      1 Reply Last reply Reply Quote 0
      • SGaist
        SGaist Lifetime Qt Champion last edited by

        Hi and welcome to devnet,

        I guess you have both shared and static libraries in the same folder ? If so, and if IIRC the linker takes the shared library by default.

        There you have several options, have both version in separated folder or change the link lines to the full path of your static libraries rather than the library name.

        Hope it helps

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply Reply Quote 0
        • E
          EscapedFromALab last edited by

          Aaah yes they are in the same folder! Thank you, I'll try and be explicit in my link lines.

          1 Reply Last reply Reply Quote 0
          • E
            EscapedFromALab last edited by

            If I make the lines explicit I guess I have to change it to something like this?

            From:
            @win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/release/ -lbpp-seq
            else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/debug/ -lbpp-seq
            else:unix: LIBS += -L$$PWD/../../local/bpp/dev/lib/ -lbpp-seq@

            To:
            @win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/release/libbpp-seq.lib
            else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/debug/libbpp-seq.lib
            else:unix: LIBS += -L$$PWD/../../local/bpp/dev/lib/libbpp-seq.a@

            I guess the last line applies to unix and osx so should be .a files and the others being windows would be .lib files? (I'm doing this on Ubuntu and haven't really done any coding on Windows before)

            1 Reply Last reply Reply Quote 0
            • E
              EscapedFromALab last edited by

              Ok I just decided to make everything easier and take the .so's out of the same folder. Deleted the stuff in the .pro file before and now there is
              @unix|win32: LIBS += -L$$PWD/../../local/bpp/dev/lib/ -lbpp-seq

              INCLUDEPATH += $$PWD/../../local/bpp/dev/include
              DEPENDPATH += $$PWD/../../local/bpp/dev/include

              win32:!win32-g++ PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/bpp-seq.lib
              else:unix|win32-g++: PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/libbpp-seq.a

              unix|win32: LIBS += -L$$PWD/../../local/bpp/dev/lib/ -lbpp-core

              INCLUDEPATH += $$PWD/../../local/bpp/dev/include
              DEPENDPATH += $$PWD/../../local/bpp/dev/include

              win32:!win32-g++ PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/bpp-core.lib
              else:unix|win32-g++: PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/libbpp-core.a@

              However trying to run results in a message:

              Assignment needs exactly one word on the left hand side.

              for the two lines:

              @win32:!win32-g++ PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/bpp-seq.lib@

              and

              @win32:!win32-g++ PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/bpp-core.lib@

              These are automatically generated by creator. I'm not sure why it thinks there are two words on the lhs of the assignment, since win32:!win32-g++ to mee looks like some logical condition for the build (I'm very new so might be wrong) and the variable corresponding to the lhs of the assignment is PRE_TARGETDEPS which seems like one word to me.

              1 Reply Last reply Reply Quote 0
              • SGaist
                SGaist Lifetime Qt Champion last edited by

                That's why

                @win32:!win32-g++@

                You need

                @win32:!win32-g++:@

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post