Why is one compiler on 10.6 able to generate PPC binaries and not the other?

Jeremy Huddleston Sequoia jeremyhu at macports.org
Fri Mar 11 11:48:01 PST 2016


> On Mar 11, 2016, at 01:50, Mojca Miklavec <mojca at macports.org> wrote:
> 
> On 11 March 2016 at 09:35, Jeremy Huddleston Sequoia wrote:
>>> On Mar 10, 2016, at 17:20, Mojca Miklavec wrote:
>>> On 10 March 2016 at 21:26, Ryan Schmidt wrote:
>>>>> On Mar 10, 2016, at 1:00 PM, Mojca Miklavec wrote:
>>>>> 
>>>>> Hi,
>>>>> 
>>>>> While following
>>>>> https://trac.macports.org/wiki/LibcxxOnOlderSystems#Leopardppc
>>>>> on 10.6/x86_64 I tried to install clang 3.7 (thinking that version 3.7
>>>>> might have an even better support for PPC than 3.6).
>>>>> 
>>>>> The problem is that clang-mp-3.7 doesn't want to produce ppc binaries,
>>>>> so I wasn't able to install libcxx. I get:
>>>>> 
>>>>>> clang++-mp-3.7 a.cc -arch ppc
>>>>> ld: unknown/unsupported architecture name for: -arch ppc
>>>>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>> 
>> The linker you have installed doesn't support ppc.  You need to install ld64 with the +ld64_127 variant to get the last version of the linker that supported ppc.
> 
> Oh, thank you. That explains a lot.
> 
> I now did
>   sudo port -v -s install ld64 +ld64_127 +universal
> and clang 3.7 indeed no longer complains about unsupported architecture.
> 
> It is still complaining about:
> 
> ld: warning: ignoring file
> /opt/local/libexec/llvm-3.7/bin/../lib/clang/3.7.1/lib/darwin/libclang_rt.osx.a,
> missing required architecture ppc in file

I suspect that is because you had the wrong linker active when you built clang-3.7.  The architectures in that library are determined at build time based on the capabilities of the linker.  Sorry, but it looks like you may need to force rebuild clang-3.7.

> but it generates the binary as expected.
> 
> Now I'm stuck at
> 
> ld: symbol dyld_stub_binder not found (normally in libSystem.dylib).
> Needed to perform lazy binding to function _abort for architecture ppc
> clang: error: linker command failed with exit code 1 (use -v to see invocation)

dyld_stub_binder only exists for i386 and x86_64 on OSX.  It was added to libSystem in SnowLeopard.

Try forcing a 10.5 deployment target by adding -mmacosx-version-min=10.5 to work around that, and file a bug report about this at http://www.llvm.org/bugs (and let me know the number).


> from compiling libcxxabi:
> 
> /opt/local/bin/clang-mp-3.7 -I/opt/mp/10.5/include abort_message.o
> cxa_aux_runtime.o cxa_default_handlers.o cxa_demangle.o
> cxa_exception.o cxa_exception_storage.o cxa_guard.o cxa_handlers.o
> cxa_new_delete.o cxa_personality.o cxa_thread_atexit.o
> cxa_unexpected.o cxa_vector.o cxa_virtual.o exception.o
> private_typeinfo.o stdexcept.o typeinfo.o -arch ppc -arch i386 -arch
> x86_64 -o libc++abi.dylib -dynamiclib -nodefaultlibs -current_version
> 3.7.0 -compatibility_version 1 -install_name /usr/lib/libc++abi.dylib
> -lSystem -std=c++11 -stdlib=libc++ -fstrict-aliasing
> -Wstrict-aliasing=2 -Wsign-conversion -Wshadow -Wconversion
> -Wunused-variable -Wmissing-field-initializers -Wchar-subscripts
> -Wmismatched-tags -Wmissing-braces -Wshorten-64-to-32 -Wsign-compare
> -Wstrict-aliasing=2 -Wstrict-overflow=4 -Wunused-parameter
> -Wnewline-eof
> ld: symbol dyld_stub_binder not found (normally in libSystem.dylib).
> Needed to perform lazy binding to function _abort for architecture ppc
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> 
> It must have something to do with the fact that I use
>   export MACOSX_DEPLOYMENT_TARGET="10.5"
> but I didn't yet try to figure out how to modify Portfiles to actually
> link against 10.5 SDK.

Odd.  I'd expect MACOSX_DEPLOYMENT_TARGET="10.5" to not use dyld_stub_binder at all.

> 
> Before I spend half a day debugging: what's the easiest way to add
>   -isysroot /Developer/SDKs/MacOSX10.5.sdk
> to the relevant ports and which ports are most likely relevant for
> this error? Just libcxxabi?
> 
> I will also try to change "if {${os.major} < 10} { ... }" in libcxxabi
> to "< 11" just in case.
> 
>>>>> At the same time clang++-mp-3.4 works fine even though both clang 3.4
>>>>> and 3.7 are x86_64 only.
>> 
>> That's because it's actually just acting a s front-end to gcc for -arch ppc.
> 
> Thank you.
> 
>>>>> I'm now trying to rebuild everything as +universal (with ppc included
>>>>> in the list of universal architectures) and hope that it will work
>>>>> afterwards.
>> 
>> Nope.  That has nothing to do with it.  That just means what architectures the clang executable will run on, not which architectures and platforms it will target.
> 
> So I guess I can just an well uninstall "clang 3.4 +universal" a it
> makes absolutely no sense?
> 
>>>>> But I would be grateful for ideas about why clang 3.4
>>>>> would be able to create ppc binaries and clang 3.7 not.
>> 
>> 3.4 doesn't.
>> 3.7 does, but you didn't have the correct linker.
> 
> Thank you.
> 
> Mojca

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4465 bytes
Desc: not available
URL: <https://lists.macosforge.org/pipermail/macports-dev/attachments/20160311/76e5993a/attachment-0001.p7s>


More information about the macports-dev mailing list