bmaxa
Legenda
- Poruka
- 70.808
Ovo dobro dodje onima koji hoce da znaju kako se radi sa komandne linije samo sa swift kompajlerom.
Elem za pocetak napravi se swift fajl obican nista posebno, kao primer uzeo sam wrapper oko poziva
C f-je.
Potom se napravi modul sa :
ovo -i mu kaze da trazi headere u tekucem direktorijumu tj `.`.
E sad treba napraviti biblioteku.
prvo napravimo .o fajl, potom biblioteku.
I to je to biblioteka je napravljena:
Potom iskopirati dylib tamo gde hocemo da pravimo exe.
L . znaci da potrazi biblioteku u tekucem diru kao -I mymodule da include fajlove za modul potrazi u diru mymodule.
i to je to. Jos mozemo sa ldd na linuxu ili sa otool na macOS da proverimo gde trazi lib:
I sad :
a bridging.swift je sad ordinary swift:
Eto moze sve bez pomagala
Elem za pocetak napravi se swift fajl obican nista posebno, kao primer uzeo sam wrapper oko poziva
C f-je.
Swift:
public func FF(_ s:String){
s.withCString({i in
print("called FF!")
f(i)
})
}
Kod:
bmaxa@Branimirs-Air mymodule % swiftc -Ounchecked mymodule.swift -emit-module -import-objc-header stub.h -I .
E sad treba napraviti biblioteku.
Kod:
swiftc -Ounchecked -c mymodule.swift -import-objc-header stub.h -o mymodule.o
Kod:
swiftc -Ounchecked -o mymodule.o stub.o -emit-library
Kod:
drwxr-xr-x 12 bmaxa staff 384 Jul 18 17:44 .
drwxr-xr-x 6 bmaxa staff 192 Jul 18 08:06 ..
-rwxr-xr-x 1 bmaxa staff 51006 Jul 18 08:16 libmymodule.dylib
-rw-r--r-- 1 bmaxa staff 82 Jul 17 23:35 module.map
-rwxr-xr-x 1 bmaxa staff 49895 Jul 18 17:44 mymodule.o
-rw-r--r-- 1 bmaxa staff 90 Jul 18 08:15 mymodule.swift
-rw-r--r-- 1 bmaxa staff 380 Jul 18 17:37 mymodule.swiftdoc
-rw-r--r-- 1 bmaxa staff 13192 Jul 18 17:37 mymodule.swiftmodule
-rw-r--r-- 1 bmaxa staff 568 Jul 18 17:37 mymodule.swiftsourceinfo
-rw-r--r-- 1 bmaxa staff 85 Jul 18 07:40 stub.c
-rw-r--r-- 1 bmaxa staff 22 Jul 18 07:32 stub.h
-rw-r--r-- 1 bmaxa staff 744 Jul 18 07:40 stub.o
Kod:
swiftc -Ounchecked bridging.swift -I mymodule -L . -lmymodule
i to je to. Jos mozemo sa ldd na linuxu ili sa otool na macOS da proverimo gde trazi lib:
Kod:
bmaxa@Branimirs-Air fileio % otool -L bridging
bridging:
/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 1292.100.5)
libmymodule.dylib (compatibility version 0.0.0, current version 0.0.0)
I sad :
Kod:
bmaxa@Branimirs-Air fileio % ./bridging
called FF!
Hello World, Branimir !
a bridging.swift je sad ordinary swift:
Swift:
import mymodule
let hello = "Branimir"
mymodule.FF(hello)
Eto moze sve bez pomagala
