2014-09-16 59 views
7

Amacım, Swift programımı bir komut dosyası gibi çalıştırmayı denemektir. Bütün program kendi kendine yeten ise, hoşuna çalıştırabilirsiniz:Komut satırında xcrun swift oluşturmak <unknown>: 0: hata: paylaşılan kütüphaneyi yükleyemiyorum

% xcrun swift hello.swift 

hello.swift

import Cocoa 
println("hello") 

Ancak, bunun ötesinde bir adım gitmek istiyorum ve hızlı modülü dahil olduğu, Ben vb diğer sınıfları, funcs, içe aktarabileceğiniz

yüzden biz

public class GoodClass { 
    public init() {} 
    public func sayHello() { 
     println("hello") 
    } 
} 
GoodClass.swift

kullanmak istediğiniz gerçekten iyi bir sınıf var diyelim

ben artık hello.swift içine bu goodie ithal etmek istiyorum: Bu çalıştırarak <> .a, .swiftmodule lib,

import Cocoa 
import GoodClass 

let myGoodClass = GoodClass() 
myGoodClass.sayHello() 

Ben ilk .o oluşturmak: nihayet Sonra

% xcrun swiftc -emit-library -emit-object GoodClass.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name GoodClass 
% ar rcs libGoodClass.a GoodClass.o 
% xcrun swiftc -emit-module GoodClass.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name GoodClass 

Ben (bir senaryo sanki) benim hello.swift çalıştırmak için hazırlıyorlar ediyorum:

% xcrun swift -I "./" -L "./" -lGoodClass -sdk $(xcrun --show-sdk-path --sdk macosx) hello.swift 

Ama bu hata var:

< unknown >:0: error: could not load shared library 'libGoodClass'

Bu ne anlama geliyor? Neyi kaçırıyorum.

% xcrun swiftc -o hello -I "./" -L "./" -lGoodClass -sdk $(xcrun --show-sdk-path --sdk macosx) hello.swift 
% ./hello 

Sonra her şey mutlu olduğunu: Ben önden gidin, bağlantıyı yaparsanız/C/C++ için ne benzer bir şey derlemek. Bununla yaşayabileceğimi düşünüyorum ama yine de paylaşılan kütüphane hatasını anlamak istiyorum.

cevap

5

Projenizi oluşturmak için yeniden biçimlendirilmiş, basitleştirilmiş bir bash betiği. -emit-object kullanımınız ve sonraki dönüşüm gerekli değildir. Komutunuz, bir libGoodClass.dylib dosyasının oluşturulmasına neden olmaz; bu, xcrun swift -I "./" -L "./" -lGoodClass -sdk $(xcrun --show-sdk-path --sdk macosx) hello.swift çalıştırdığınızda, -lGoodClass parametreniz için gerekli olan bağlantıdır. Ayrıca, -module-link-name ile bağlantı kurmak için modül belirtmediniz.

Bu

benim için çalışıyor:

#!/bin/bash 

xcrun swiftc \ 
    -emit-library \ 
    -module-name GoodClass \ 
    -emit-module GoodClass.swift \ 
    -sdk $(xcrun --show-sdk-path --sdk macosx) 

xcrun swift -I "." -L "." \ 
    -lGoodClass \ 
    -module-link-name GoodClass \ 
    -sdk $(xcrun --show-sdk-path --sdk macosx) hello.swift 
İlgili konular