對於僅使用標準庫使用-static-stdlib
的情況,您可以解決此問題。
當您編譯沒有選項的腳本時,最終的可執行文件包含各種Swift標準庫的rpath,您可以使用otool
進行驗證。
> swiftc menu.swift
> otool -L menu
menu:
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1348.28.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1504.75.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 48.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1349.25.0)
@rpath/libswiftAppKit.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftCore.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftCoreData.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftCoreGraphics.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftCoreImage.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftDarwin.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftDispatch.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftFoundation.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftIOKit.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftObjectiveC.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftQuartzCore.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftSwiftOnoneSupport.dylib (compatibility version 1.0.0, current version 800.0.63)
@rpath/libswiftXPC.dylib (compatibility version 1.0.0, current version 800.0.63)
使用-static-stdlib
確保標準庫鏈接到所需的。
> swiftc -static-stdlib menu.swift
> otool -L menu
menu:
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1348.28.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1349.25.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1504.75.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 48.0.0)
/System/Library/Frameworks/CoreData.framework/Versions/A/CoreData (compatibility version 1.0.0, current version 752.8.0)
/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics (compatibility version 64.0.0, current version 1070.13.0)
>
我仍然不知道如何鏈接第三方框架 - 但上述步驟解決了我原來的問題。
Related Linux Question - Compile Swift script with static Swift core library
您必須鏈接動態庫,而不是靜態庫。 – Sulthan
您似乎需要導入'AppKit' – vadian
查找鏈接器命令行選項或將其編譯爲目標文件「-o」,然後手動調用鏈接器。 – Sulthan