GNU/Linux >> Belajar Linux >  >> Linux

Gunakan perpustakaan C di Swift di Linux

Untuk mengikuti jawaban MBuhot yang luar biasa, saya hanya melakukan ini untuk menjalankan "hello world" Swift OpenGL pada beberapa sistem Linux dan saya dapat menambahkan sedikit lebih banyak detail.

Dalam kasus saya, saya memerlukan fungsi OpenGL dan GLUT, jadi pertama-tama saya membuat modul sistem COpenGL. Sumber modul ini dapat ditemukan di GitHub, tetapi pada dasarnya ini adalah direktori dengan dua file:Package.swift kosong, dan module.modulemap berikut:

module COpenGL [system] {
    header "/usr/include/GL/gl.h"
    link "GL"
    export *
}

Perhatikan GL kapital di opsi tajuk dan tautan, yang saya perlukan untuk mencocokkan tajuk dan pustaka Mesa.

Untuk fungsi GLUT, saya membuat modul CFreeGLUT serupa (sekali lagi, di GitHub) dengan module.modulemap berikut:

module CFreeGLUT [system] {
    header "/usr/include/GL/freeglut.h"
    link "glut"
    export *
}

Untuk aplikasinya, jika Anda ingin menggunakan Swift Package Manager, Anda harus membuat Package.swift di direktori utama yang terlihat seperti ini:

import PackageDescription

let package = Package(
    dependencies: [
        .package(url: "https://github.com/BradLarson/COpenGL.git", from: "1.0.0"),
        .package(url: "https://github.com/BradLarson/CFreeGLUT.git", from: "1.0.0")
    ]
) 

Hal di atas diambil dari modul sistem versi GitHub saya, tetapi Anda dapat mengedit jalur agar mengarah ke salinan lokal, jika Anda mau.

Saya menggunakan aplikasi "hello world" Buku Merah sebagai basis saya, yang terlihat seperti berikut saat dikonversi ke Swift:

import COpenGL
import CFreeGLUT

func renderFunction() {
    glClearColor(0.0, 0.0, 0.0, 0.0)
    glClear(UInt32(GL_COLOR_BUFFER_BIT))
    glColor3f(1.0, 0.0, 0.0)
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0)
    glBegin(UInt32(GL_POLYGON))
        glVertex2f(-0.5, -0.5)
        glVertex2f(-0.5, 0.5)
        glVertex2f(0.5, 0.5)
        glVertex2f(0.5, -0.5)
    glEnd()
    glFlush()
}

var localArgc = CommandLine.argc
glutInit(&localArgc, CommandLine.unsafeArgv)
glutInitDisplayMode(UInt32(GLUT_SINGLE))
glutInitWindowSize(500,500)
glutInitWindowPosition(100,100)
glutCreateWindow("OpenGL - First window demo")
glutDisplayFunc(renderFunction)
glutMainLoop()

Tempatkan itu ke dalam main.swift file dalam subdirektori Sumber. Jalankan swift build dan Swift Package Manager akan keluar, mengunduh modul sistem, membuat aplikasi, dan menautkan modul ke dalamnya.

Jika Anda tidak ingin menggunakan Swift Package Manager, Anda masih dapat menggunakan modul sistem ini secara manual dari baris perintah. Untuk melakukannya, unduh ke direktori lokal dan rujuk secara eksplisit saat mengompilasi:

swiftc -I ./COpenGL -I ./CFreeGLUT main.swift

Peta modul akan dibaca dan Anda akan dapat mengakses OpenGL dan fungsi GLUT dari dalam aplikasi Swift Anda di Linux.


Gunakan Modul Sistem untuk mengimpor file header OpenGL:https://github.com/Apple/swift-package-manager/blob/master/Documentation/SystemModules.md

Dengan asumsi Anda memiliki tata letak direktori seperti:

COpenGL/
  Package.swift
  module.modulemap
  .git/

YourApp/
  Package.swift
  main.swift
  .git/

file COpenGL/module.modulemap akan terlihat seperti:

module COpenGL [system] {
    header "/usr/include/gl/gl.h"
    link "gl"
    export *
}

Ini harus dibuat dalam repo git terpisah, dengan tag versi:

touch Package.swift
git init
git add .
git commit -m "Initial Commit"
git tag 1.0.0

Kemudian nyatakan sebagai dependensi dalam file YourApp/Package.swift

import PackageDescription

let package = Package(
    dependencies: [
        .Package(url: "../COpenGL", majorVersion: 1)
    ]
) 

Kemudian di file main.swift Anda, Anda dapat mengimpornya:

import COpenGL
// use opengl calls here...

Linux
  1. Cara menggunakan BusyBox di Linux

  2. 5 alasan untuk menggunakan Linux di tahun 2020

  3. Bagaimana saya menggunakan cron di Linux

  1. Cara menggunakan FIND di Linux

  2. Cara Menggunakan Unzip di Linux

  3. Kemungkinan untuk menggunakan .dll di Linux

  1. Bagaimana saya menggunakan pengaturan aksesibilitas Linux

  2. Cara menggunakan Perintah Su di Linux

  3. Linux – Penggunaan O_direct Di Linux?