GNU/Linux >> Belajar Linux >  >> Linux

Kompilasi kode C dan paparkan ke Swift di Linux

Menggunakan fungsi C dengan cepat membutuhkan tajuk penghubung yang mencakup semua fungsi C yang Anda butuhkan. Misalnya, myBridgingHeader.h yang berisi #include "Car.h" dan hal-hal C lainnya yang Anda inginkan. Saya yakin C++ saat ini tidak didukung.

Setelah Anda memiliki tajuk penghubung, Anda perlu mengetahuinya dengan cepat. Pengguna Xcode mendapatkan ini secara gratis saat mereka menambahkannya ke proyek. Di Linux, gunakan flag '-import-objc-header /path/to/header' saat kompilasi.

Sunting:Saya telah menambahkan contoh lengkap di bawah ini yang terdiri dari 6 file untuk orang lain yang mungkin memiliki pertanyaan ini. Ini pada dasarnya sama dengan yang di atas tapi saya tidak melihatnya sampai saya menggabungkannya haha. Selain itu, ini mungkin berguna bagi seseorang yang perlu menautkan ke pustaka statis.

Salin isi file di bawah ini ke file dengan nama yang sesuai, make , lalu ./hello dan itu seharusnya berhasil. Sebagai catatan, saya hanya menjalankan ini di swift versi 2.2-dev (gunakan swift --version untuk memeriksa milik Anda)

  • halo.swift:

    let n: Int32 = 5
    print("Hello, Swift World!")
    print("mult2(\(n,N)) = \(mult2(n,N))")
    print("CONST1=\(CONST1), CONST2=\(CONST2), CONST3=\(CONST3)")
    
  • bridge.h:

    #include "defs.h"
    #include "mult.h"
    
  • defs.h:

    #define CONST1 1
    #define CONST2 2
    #define CONST3 3
    
  • mult.h:

    #define N 7
    int mult2(int,int);
    
  • mult.c:

    #include "defs.h"
    #include "mult.h"
    int mult2(int a, int b)
    {
         return a*b;
    }
    
  • Makefile:

    all: hello
    
    hello: libmult.a
         swiftc hello.swift -import-objc-header ./bridge.h -L. -lmult -o hello
    
    libmult.a: mult.o
         ar -rc libmult.a mult.o
         ranlib libmult.a
    
    mult.o: mult.c mult.h defs.h
         gcc -c mult.c -o mult.o
    
    .PHONY: clean   
    clean:
         rm -f *.o *.a hello
    

Jika Anda membuat pustaka dari kode C, Anda dapat membuat modul sistem untuk itu, yang kemudian dapat diimpor ke Swift, lihat jawaban ini:Gunakan pustaka C di Swift di Linux.

Cara lain untuk melakukan tugas ini adalah dengan membuat tajuk penghubung, seperti yang disarankan oleh @Philip. Berikut adalah contoh yang terlalu disederhanakan. Mari pertimbangkan kode C berikut:

/* In car.h */
int getInt();

/* In car.c */
int getInt() { return 123; }

Kami akan menggunakan car.h sebagai tajuk penghubung. Sumber swift adalah (dalam file junk.swift ):

print("Hi from swift!")
var i = getInt()
print("And here is an int from C: \(i)!")

Pertama, buat file objek, car.o , dari car.c :

gcc -c car.c

Sekarang buat sebuah executable, junk , sebagai berikut:

swiftc -import-objc-header car.h junk.swift car.o -o junk

Menjalankan executable memberi:

$ ./junk
Hi from swift!
And here is an int from C: 123!

-import-objc-header opsi disembunyikan. Untuk melihatnya dan banyak opsi tersembunyi lainnya, jalankan:

swiftc -help-hidden 

Saya melakukan ini menggunakan snapshot pengembangan Swift 3.0 untuk Ubuntu 14.04 mulai 12 April, tersedia di sini:https://swift.org/builds/development/ubuntu1404/swift-DEVELOPMENT-SNAPSHOT-2016-04-12-a/swift-DEVELOPMENT- SNAPSHOT-2016-04-12-a-ubuntu14.04.tar.gz

Sekarang, jika Anda ingin menggunakan C++, Anda perlu membuat pembungkus, ditulis dalam file sumber C++ dan dikompilasi dengan kompiler C++, tetapi dengan fungsi yang dapat dipanggil dari C dengan menggunakan extern "C" . Fungsi-fungsi itu kemudian dapat dipanggil dari Swift sebagai fungsi C apa pun. Lihat, misalnya, jawaban ini:Bisakah saya mencampur Swift dengan C++? Seperti Objective - file C .mm


Linux
  1. Bagaimana cara membongkar, memodifikasi, dan kemudian memasang kembali executable Linux?

  2. Bagaimana cara membangun Visual Studio Solution di Linux?

  3. Kompilasi dan bangun dengan satu baris perintah Java (Linux)

  1. Linux – Bagaimana Cara Memeriksa Distro Linux Apakah Aman Dan Tidak Memiliki Kode Berbahaya??

  2. Lihat Tag Servis DELL dan Kode Servis Ekspres Dari Linux dan Windows

  3. Menggunakan rz dan sz di bawah shell linux

  1. Cara Mengkompilasi dan Menginstal Perangkat Lunak dari Kode Sumber di Linux

  2. Membuat dan Menghapus File dan Direktori Di Linux

  3. Cara tar, untar file dan melihat isi file tar di Linux