discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] ADS-B on Mac 10.9 - possible linking error


From: Michael Dickens
Subject: Re: [Discuss-gnuradio] ADS-B on Mac 10.9 - possible linking error
Date: Tue, 23 Sep 2014 10:56:36 -0400

A few points regarding gr-air-modes on OSX:

0) "ldconfig" does not exist on OSX.  Apple's DYLD manager "does the right 
thing" most of the time without having to be told that new libraries are 
available.  One can tweak the DYLD manager behavior during runtime via various 
DYLD_* variables < 
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dyld.1.html
 > ... I encourage folks to set these variables just for a specific execution, 
e.g,:
{{{
DYLD_PRINT_LIBRARIES=1 /opt/local/bin/python2.7
}}}
and so forth.  Setting (e.g.) DYLD_LIBRARY_PATH to always include 
/opt/local/lib is dangerous since generally a library knows which other 
libraries it is linked to and it is those libraries that should be used, not 
some identically named on that might not be ABI compatible.

1) I just added gr-air-modes to MacPorts < 
https://trac.macports.org/changeset/125643 >, with a few patches to get things 
going.  I'll send a pull request to bistromath with the changes.  This port 
should be live by around 11 AM US/Eastern this morning. You'll want to "sudo 
port sync" at a minimum; "sudo port selfupdate" is almost always better.

2) Because GNU Radio now links on OSX with some @rpath libraries, it's wise to 
set the RPATH too, not just the INSTALL_NAME.

["rpath" == "runtime path"; instead of specifying the exact library location, 
e.g. /opt/local/lib/libfoo.dylib, one uses the runtime path instead, e.g., 
@rpath/libfoo.dylib .  This, in theory, allows the libraries using @rpath to be 
embedded within an application by setting the @rpath to be the absolute path to 
where those libraries are actually located.]

The addition is:
{{{
if(APPLE)
    if(NOT CMAKE_INSTALL_NAME_DIR)
        set(CMAKE_INSTALL_NAME_DIR
            ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
            PATH "Library Install Name Destination Directory" FORCE)
    endif(NOT CMAKE_INSTALL_NAME_DIR)
    if(NOT CMAKE_INSTALL_RPATH)
        set(CMAKE_INSTALL_RPATH
            ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
            PATH "Library Install RPath" FORCE)
    endif(NOT CMAKE_INSTALL_RPATH)
    if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
        set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE
            BOOL "Do Build Using Library Install RPath" FORCE)
    endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
endif(APPLE)
}}}

Hope this helps! - MLD

On Sep 23, 2014, at 7:51 AM, Bastian Bloessl <address@hidden> wrote:
> On 23 Sep 2014, at 13:19, Alan Woodward <address@hidden> wrote:
>> I am trying to build and use gr_air_modes built from 
>> https://github.com/bistromath/gr-air-modes.  But the command
>> 
>> sudo ldconfig
>> 
>> is not available on Mac 10.9.5.  When I execute the modes_rx command I get 
>> the following:
>> 
>> sudo /usr/local/bin/modes_gui
>> Traceback (most recent call last):
>> File "/usr/local/bin/modes_gui", line 30, in <module>
>>   import air_modes
>> ImportError: No module named air_modes
> 
> Python cannot find find the module, so you might have to adapt you PYTHONPATH 
> to include the folder where air_modes is installed (something like 
> /usr/local/lib/python2.7/site-packages). Then you will most likely run into 
> problems with shared libraries that can be fixed like this
> 
> https://github.com/bastibl/gr-air-modes/commit/c1379fa5979fadd296e8be03634c1a561384b424
> 
> If you run it and it segfaults assert (with cmake) that you use the python 
> libraries from port which are typically installed under /opt/local. By 
> default it selects the libs from OS X.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]