[CMake] Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib
Lucas Soltic
lucas.soltic at orange.fr
Tue Mar 6 12:18:23 EST 2018
If full support for Swift was added to CMake yes why not. But I’m not a CMake developer and considering current Swift support it’s a bit early I think. I mean Swift support should come as a global feature, not just this specific point.
> Le 6 mars 2018 à 11:02, Harry Mallon <Harry.Mallon at codex.online> a écrit :
>
> Hi Lucas,
>
> With Swift there is a required standard dylib that must be included (and Xcode copies by default). So perhaps CMake should automatically add the rpath option to the Xcode command line?
>
> Harry
>
> From: Lucas Šoltić <lucas.soltic at orange.fr>
> Date: Friday, 2 March 2018 at 23:20
> To: Harry Mallon <Harry.Mallon at codex.online>
> Cc: "cmake at cmake.org" <cmake at cmake.org>
> Subject: Re: [CMake] Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib
>
> You miss a runtime search path when linking your executable. And this is what you achieved with install_name_tool with an additional step.
>
> To avoid this additional step, see https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/RunpathDependentLibraries.html
> or
> https://stackoverflow.com/questions/42613881/adding-run-time-shared-library-search-path-to-executable-at-compile-time-clang
>
> By the way this is not related to Swift at all.
>
> Lucas
>
> Le 2 mars 2018 à 20:12, Harry Mallon <Harry.Mallon at codex.online> a écrit :
>
> Hello all,
>
> When making a pure Swift bundle Xcode automatically copies `libswiftCore.dylib` as follows.
>
> ```
> ./Tests/SwiftOnly/Debug/SwiftOnly.app
> └── Contents
> ├── Frameworks
> │ └── libswiftCore.dylib
> ├── Info.plist
> ├── MacOS
> │ └── SwiftOnly
> ├── PkgInfo
> └── Resources
> └── libswiftRemoteMirror.dylib
> ```
> When I try to run the output I get a dynamic linking error. I can reproduce this by adding MACOSX_BUNDLE to `./Tests/SwiftOnly/CMakeLists.txt` (in the CMake source tree) in `add_executable` and trying to run the result.
>
> ```
> % ./Tests/SwiftOnly/Debug/SwiftOnly.app/Contents/MacOS/SwiftOnly
> dyld: Library not loaded: @rpath/libswiftCore.dylib
> Referenced from: .../Tests/SwiftOnly/Debug/SwiftOnly.app/Contents/MacOS/SwiftOnly
> Reason: image not found
> zsh: abort ./Tests/SwiftOnly/Debug/SwiftOnly.app/Contents/MacOS/SwiftOnly
> ```
>
> It seems that the rpath should be set to `@loader_path/../Frameworks`. I am not a Swift maestro so not exactly sure on the details of how this works. After running `install_name_tool -add_rpath "@loader_path/../Frameworks" ./Tests/SwiftOnly/Debug/SwiftOnly.app/Contents/MacOS/SwiftOnly` it runs fine.
>
> Does anyone have any idea what to do? Is it a missing CMake Swift feature? We are currently working around it by manually adding the rpath with a cmake step.
>
> Harry
> Harry Mallon
> Senior Software Engineer
>
>
>
> T +44 203 7000 989
> 60 Poland Street | London | England | W1F 7NT
>
>
> Three Billboards
> Blade Runner 2049
> I, Tonya
>
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20180306/b5d4d071/attachment.html>
More information about the CMake
mailing list