Building a universal static libstdc++ library through MacPorts

Titus von Boxberg titus at v9g.de
Fri Mar 22 06:22:33 PDT 2013


-------- Original Message --------
> From: "Alex Reynolds" <alexpreynolds at gmail.com>
> Sent: Donnerstag, 21. März 2013 23:37
> To: macports-dev at lists.macosforge.org
> Subject: Building a universal static libstdc++ library through MacPorts
> 
> I would like to build a set of universal binaries with MacPorts GCC 4.7.2 (universal), which link in a static C++ standard library. 
> 
> I would like to do this to see if this will fix errors my end users are seeing with unlinked objects from the C++ standard library, which are referenced in code compiled with MacPorts GCC 4.7.2 (universal) but which apparently are not part of the C++ standard library on a stock installation of (for instance) Mac OS X 10.8.2. 
> 
> For example, some OS X users see the following error:
> 
> ------
> $ myBinary
> dyld: lazy symbol binding failed: Symbol not found: __ZNSt8__detail15_List_node_base7_M_hookEPS0_
>   Referenced from: /usr/local/bin/myBinary
>   Expected in: /usr/lib/libstdc++.6.dylib
> 
> dyld: Symbol not found: __ZNSt8__detail15_List_node_base7_M_hookEPS0_
>   Referenced from: /usr/local/bin/myBinary
>   Expected in: /usr/lib/libstdc++.6.dylib
> 
> Trace/BPT trap: 5
> 
> $ nm myBinary | grep __ZNSt8__detail15_List_node_base7_M_hookEPS0_
>         U __ZNSt8__detail15_List_node_base7_M_hookEPS0_
> ------
> 
> I added the -static-libstdc++ flag before compilation, but the binaries do not include the static library and instead appear to continue linking to dynamic equivalents:
> 
> ------
> $ otool -L /usr/local/bin/myBinary
> /usr/local/bin/myBinary:
>        /usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.5)
>        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
>        /opt/local/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.17.0)
>        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1669.0.0)
>        /opt/local/lib/gcc47/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
>        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
> ------
> 
> Distributing MacPorts GCC 4.7.2 (universal) with my pre-built binaries does not seem like a realistic option. To keep complexity and distribution sizes down, I would like to try to distribute binaries which just include the static library, if that is required to address these errors.

Wouldn't it be feasible for you to just distribute libstdc++.dylib
from MP (and possibly further libs referenced in /opt/local/lib)
together with your exe?

Regards
Titus




More information about the macports-dev mailing list