[llvm-dev] Ld64.lld cannot find Foundation framework

344 views
Skip to first unread message

Edmund Furse via llvm-dev

unread,
May 7, 2020, 5:36:51 AM5/7/20
to llvm...@lists.llvm.org
Dear LLVM community I need some help please.

I want to use LLVM's clang and lld within a MacOSX sandboxed app.  This is because sandboxing does not allow calls to /usr/bin/clang.
The clang binary works fine to compile a file, but ld64.lld comes up with the error "cannot find framework".
However similar arguments using /usr/bin/ld instead of ld64.lld works fine.

Here are the details:

Here is the call using /usr/bin/ld:

/usr/bin/ld HelloObjC.o -o HelloObjC  -v -sdk_version 10.14.0 -macosx_version_min 10.14.0 -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -framework Foundation -framework Cocoa -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk  -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.osx.a -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk

This works correctly.

Here is the call using ld64.lld:

/Users/edmundfurse/Documents/NewClang/NewClangM21b/NewClangM21/Tools/bin/ld64.lld HelloObjC.o -o HelloObjC  -v -sdk_version 10.14.0 -macosx_version_min 10.14.0 -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -framework Foundation -framework Cocoa -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -L/usr/local/lib -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.osx.a -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk

gives the error message:

Library search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib
Framework search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks
ld64.lld: error: Unable to find framework for -framework Foundation

Any suggestions welcome.


James Y Knight via llvm-dev

unread,
May 7, 2020, 7:26:53 AM5/7/20
to Edmund Furse, llvm-dev
The MachO port of lld (ld64.lld) doesn't work. There is recently some activity to start to fix this situation, but for now you need to use Apple's linker.

_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Edmund Furse via llvm-dev

unread,
May 7, 2020, 1:54:26 PM5/7/20
to James Y Knight, llvm...@lists.llvm.org
Thanks for your reply.  Two questions:
1). Will ld64.lld be fixed in LLVM v11.0 and when is this likely to be?
2). You mention Apple’s linker, by which I assume you mean GNU’s ld.
Is it possible to get a binary version of ld (preferably that does not use other things from /usr/bin)?

Thanks

James Y Knight via llvm-dev

unread,
May 7, 2020, 2:23:38 PM5/7/20
to Edmund Furse, llvm-dev
On Thu, May 7, 2020 at 1:54 PM Edmund Furse <edmund...@imitation.uk.com> wrote:
Thanks for your reply.  Two questions:
1). Will ld64.lld be fixed in LLVM v11.0 and when is this likely to be?

Likely won't be fixed that soon.

2). You mention Apple’s linker, by which I assume you mean GNU’s ld.
Is it possible to get a binary version of ld (preferably that does not use other things from /usr/bin)?

No, Apple does not use GNU ld, they have their own linker, "ld64". That's what you ran as /usr/bin/ld on your mac.

Edmund Furse via llvm-dev

unread,
May 7, 2020, 3:16:07 PM5/7/20
to James Y Knight, llvm...@lists.llvm.org
James, many thanks.

Is there any linker available for Macs that has a freely available binary version?
I thought maybe that GNU’s linker might fit the bill?

I cannot use Apple’s linker from /usr/bin/ as it is not allowed to make external calls from a sandboxed app.
Hence my interest in the LLVM lld.

Shoaib Meenai via llvm-dev

unread,
May 7, 2020, 3:39:19 PM5/7/20
to Edmund Furse, James Y Knight, llvm...@lists.llvm.org

You can always download source tarballs of ld64 from https://opensource.apple.com/tarballs/ld64/ and build it yourself. (https://github.com/michaeleisel/zld might also be interesting to you, depending on what all you plan to use the linker for.)

Edmund Furse via llvm-dev

unread,
May 8, 2020, 3:58:12 AM5/8/20
to Shoaib Meenai, llvm...@lists.llvm.org
Thank you for your ideas.I have tried both of your suggestions.

1).  Apple’s ld64 downloads ok and the xcodeproj launches ok.  However a build gives six errors including:
Unable to find sdk ‘Macosx.internal’
tapi/tapi.h file not found
macho-/dyld+priv_h file not found
llvm-c/lto.h file not found
Why cannot Apple provide code that works?  Has anyone managed to overcome these problems?

2). lzd stores some metadata in /tmp/zld-… and hence will not be allowed in a Sandboxed app.

mayuyu.io via llvm-dev

unread,
May 8, 2020, 5:51:55 AM5/8/20
to Edmund Furse, llvm...@lists.llvm.org
That’s because it requires Apple Internal SDK.

Zhang

在 2020年5月8日,15:58,Edmund Furse via llvm-dev <llvm...@lists.llvm.org> 写道:

Thank you for your ideas.I have tried both of your suggestions.
Reply all
Reply to author
Forward
0 new messages