Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib

Harry Mallon-2

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 <a id="c1-id-17" style="TEXT-DECORATION: none; COLOR: gray" href="callto:&#43;44 203 7000 989"> +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
Reply | Threaded
Open this post in threaded view
|

Re: Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib

Lucas Soltic
You miss a runtime search path when linking your executable. And this is what you achieved with install_name_tool with an additional step.

or

By the way this is not related to Swift at all.

Lucas

Le 2 mars 2018 à 20:12, Harry Mallon <[hidden email]> 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 <a id="c1-id-17" style="TEXT-DECORATION: none; COLOR: gray" href="callto:+44 203 7000 989"> +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

--

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
Reply | Threaded
Open this post in threaded view
|

Re: Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib

Harry Mallon-2

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ć <[hidden email]>
Date: Friday, 2 March 2018 at 23:20
To: Harry Mallon <[hidden email]>
Cc: "[hidden email]" <[hidden email]>
Subject: Re: [CMake] Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib

 

 

or

 

By the way this is not related to Swift at all.

 

Lucas


Le 2 mars 2018 à 20:12, Harry Mallon <
[hidden email]> 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 <a href="callto:&#43;44%20203%207000%20989">+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


--

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
Reply | Threaded
Open this post in threaded view
|

Re: Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib

Lucas Soltic
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 <[hidden email]> 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ć <[hidden email]>
Date: Friday, 2 March 2018 at 23:20
To: Harry Mallon <[hidden email]>
Cc: "[hidden email]" <[hidden email]>
Subject: Re: [CMake] Swift executables with MACOSX_BUNDLE fail to find libswiftCore.dylib

 

 

or

 

By the way this is not related to Swift at all.

 

Lucas


Le 2 mars 2018 à 20:12, Harry Mallon <
[hidden email]> 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 <a href="callto:+44%20203%207000%20989">+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


--

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