Ld64.lld cannot find Foundation framework

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.

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.

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

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.

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.

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.)

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.

That’s because it requires Apple Internal SDK.

Zhang