Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. MacOS Dynamic Library Problems (dylib)

MacOS Dynamic Library Problems (dylib)

Scheduled Pinned Locked Moved Unsolved General and Desktop
4 Posts 2 Posters 1.7k Views 1 Watching
  • 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.
  • R Offline
    R Offline
    Rondog
    wrote on last edited by
    #1

    I am having a problem getting a program to work with dynamic librarys. XCode 7.2.1, MacOS 10.10.5, Qt 5.6.0. I am looking for suggestions to solve this.

    The program works with statically linked libraries but I get the following error when trying to run the program using dynamically linked libraries:

    dyld: Library not loaded: libcompfiles.1.dylib
      Referenced from: /Users/ron/MyProjects/compview/Debug/compview.app/Contents/MacOS/compview
      Reason: image not found
    

    I ran otool -L on the compiled program and it shows the following:

    bash-3.2$ otool -L compview
    	libcompfiles.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    	libgridfiles.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    	/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1404.32.0)
    	/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
    	@rpath/QtOpenGL.framework/Versions/5/QtOpenGL (compatibility version 5.6.0, current version 5.6.0)
    	@rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.6.0, current version 5.6.0)
    	@rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.6.0, current version 5.6.0)
    	@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.6.0, current version 5.6.0)
    	/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
    ...
    

    The first entries from otool -L show the libraries but seem suspicious in that there is no path (or even @rpath). I think this is part of the problem but I am not sure why.

    On a side note the name of the library file generated after compiling doesn't have the version information: libgridfiles.dylib and not libgridfiles.1.dylib. I have both files as I made a copy of libgridfiles.dylib and called it libgridfiles.1.dylib so I don't think the name is an issue (?). Is it possible to have the library files created with the version info in the name along with a alias for the shortened name? It seems this is how the other libraries work.

    Program QMake Section:

    DEPENDPATH += 		../libcompfiles/lib	\
    			../libgridfiles/lib
    INCLUDEPATH += 		../libcompfiles/src \
    			../libgridfiles/src
    LIBS+=  			-L../libcompfiles/lib -lcompfiles \
    			-L../libgridfiles/lib -lgridfiles
    
    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Either set the DYLD_LIBRARY_PATH environment variable to contain the path(s) where these libraries can be found or update the libraries id to contain the full path to where it is.

      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
      0
      • R Offline
        R Offline
        Rondog
        wrote on last edited by
        #3

        Yeah, those seem to be the options.

        I noticed the program ran fine when run through QtCreator. After some investigation I found it automatically set the DYLD_LIBRARY_PATH and DYLD_FRAMEWORK_PATH so this method works. The downside is that you cannot run the program through Finder or from a terminal window (will likely work if the libraries were 'installed' in a standard location).

        I was able to get it to run through XCode by adding post link step that added the necessary path information to the library referenced in the executable:

        # very rough but it works.
        QMAKE_POST_LINK += install_name_tool -change libcompfiles.1.dylib /Users/ron/MyProjects/libcompfiles/lib/libcompfiles.dylib $$OUT_PWD/Debug/compview.app/Contents/MacOS/$$TARGET $$escape_expand(\n)
        QMAKE_POST_LINK += install_name_tool -change libgridfiles.1.dylib /Users/ron/MyProjects/libgridfiles/lib/libgridfiles.dylib $$OUT_PWD/Debug/compview.app/Contents/MacOS/$$TARGET
        

        One plus is that this solves the other issue where the library file included the version number (the change option from install_name_tool allowed me to use the non-versioned library name).

        I need to find a way to clean up the post link commands so they are more generic (use variables instead of hard coded paths for example). I am assuming using a full path makes it easier for macdeployqt (?). It seems like something is wrong though as I didn't expect I would need to do all this to get it to work on this OS.

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          IIRC, you should be able to achieve that using the OUT_PWD variable.

          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
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved