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

[Solved]dyld: Library not loaded --- for a custom widget



  • Dear Qt experts:

    I compiled a custom widget in a .dylib (libdline45vplugin.dylib) and installed it in ~/QtSDK/Desktop/Qt/473/gcc/plugins/designer. Then I created a simple project with only one such widget in the ui. I added the following two lines in .pro to get the project compiled in addition to copy dline45v.h to the project directory:

    LIBS += -ldline45vplugin
    LIBS += -L/Users/stu/qt/CW_DL45v-build-desktop

    However I got the following runtime error:

    dyld: Library not loaded: libdline45vplugin.dylib
    Referenced from: /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t
    Reason: image not found

    Any one can tell me where should I put the dylib to get the project running? Manually or there is a tool for this purpose?

    Thanks.



  • You can tray to add the path to your lib to DYLD_LIBRARY_PATH, see an example in "this reply":http://developer.qt.nokia.com/forums/viewreply/19939/ of another thread.

    Additionally, what path for your lib is shown on this command:

    @
    otool -L /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t
    @



  • Hi Volker,

    The "otool" utility shows that the libdline45vplugin.dylib does not have absolute/complete path.

    $ otool -L /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t
    /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t:
    libdline45vplugin.dylib (compatibility version 0.0.0, current version 0.0.0)

    I added the DYLD_LIBRARY_PATH in .profile. After re-refrence it, I got the env output:

    $ env |grep DY
    DYLD_LIBRARY_PATH=/Users/stu/qt/CW_DL45v-build-desktop

    However, I still get the same error. Did I miss any step?

    Thanks.



  • Maybe the dylib is missing some other libs, check it with otool too.

    You need not install it to plugins/designer. As long as it is not a designer plugin, it's useless in that place.

    If it is a designer plugin, then you shouldn't use that dylib for your actual program.



  • Hi Volker,

    a little bit history for my project.
    I want to create some custom widgets which will be used in the form layout in the Creator. I followed the online instruction, create a widget, compiled it in a dylib, and "make install" installed it in ~/QtSDK/Desktop/Qt/473/gcc/plugins/designer. However, when starting the Creator, I could not see my widget. If I manually copy the dylib to "Qt Creator.app/Contents/PlugIns/designer", the Creator crashes at startup. With the advise from other developer, I downloaded the source code of the Qt Creator, compiled it, and put it in QtSDK directory. then I can use my widget in the Creator.
    Please let me know if I was wrong in any steps in creating the custom widget.

    Now I want to test my widget to build an application, and result in this "image not found" error.

    this is the complete output of otool:

    $ otool -L /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t
    /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t:
    libdline45vplugin.dylib (compatibility version 0.0.0, current version 0.0.0)
    /Users/stu/QtSDK/Desktop/Qt/473/gcc/lib/QtGui.framework/Versions/Current/QtGui (compatibility version 4.7.0, current version 4.7.3)
    /Users/stu/QtSDK/Desktop/Qt/473/gcc/lib/QtCore.framework/Versions/Current/QtCore (compatibility version 4.7.0, current version 4.7.3)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 625.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.10)

    Thanks.



  • another question, for the app, should I compile the lib in different way from the .dylib used in designer?

    thanks.



  • Now I compiled a C++ shared library libdl45v.1.0.0.dylib with the same widget source code. modified .pro as

    LIBS += -ldl45v
    LIBS += -L/Users/stu/qt/dl45v-build-desktop

    The compilation is clean. But the runtime error is still there. This time it looks for different dylib:

    dyld: Library not loaded: libdl45v.1.dylib
    Referenced from: /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t
    Reason: image not found

    my otool output:
    $ !736
    otool -L /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t
    /Users/stu/qt/t-build-desktop/t.app/Contents/MacOS/t:
    libdl45v.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /Users/stu/QtSDK/Desktop/Qt/473/gcc/lib/QtGui.framework/Versions/Current/QtGui (compatibility version 4.7.0, current version 4.7.3)
    /Users/stu/QtSDK/Desktop/Qt/473/gcc/lib/QtCore.framework/Versions/Current/QtCore (compatibility version 4.7.0, current version 4.7.3)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 625.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.10)

    $ env |grep DY
    DYLD_LIBRARY_PATH=/Users/stu/qt/dl45v-build-desktop

    and I have these files in dl45v-build-desktop:

    Makefile
    libdl45v.1.0.dylib
    moc_dline45v.cpp
    dline45v.o
    libdl45v.1.dylib
    moc_dline45v.o
    libdl45v.1.0.0.dylib
    libdl45v.dylib

    Thanks.



  • If you run this from within Qt Creator, then you must add the DYLD_LIBRARY_PATH environment variable to the execution environment (project pane/run settings). It is not pulled in from the shell!



  • Hi Volker,

    Thanks for the help. I added the path in the Projects pane. IT WORKS.

    I will mark this thread as SOLVED shortly after the next questions cleared.

    I want to clarify these steps:

    1. In my case the custom widget for Designer was right and the dylib (libdline45vplugin.dylib) was correctly installed.
    2. Why do I need to rebuild the Creator from source to use the custom widget?
    3. I need to build a shared library for the widget to be used in app, libdl45v.1.dylib. The shared lib should be created with the same source code of the widget (exclude the widgetInterface class).

    If I did right for the above steps, where, by default, should I put the shared lib ?

    Thanks.



  • Regarding Creator, I don't know. You'd better start a new thread in the "Tools Forum":http://developer.qt.nokia.com/forums/viewforum/13/.

    Regarding the two libs:
    You can link the designer plugin to the shard lib with the widgets. You must add that lib to designer/creator too. I don't know where it has to go, though.

    Or create a static version of your widget lib and link that to the plugin. You end up with only the plugin shared lib then, no additional libs to install. That's what I do here.

    The place for the shared lib(s) is platform dependent. Please have a look in the docs for that (deployment) resp. refer to the system specifications of your OS.


Log in to reply