GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden Sie eine C-Bibliothek in Swift unter Linux

Um an die hervorragende Antwort von MBuhot anzuknüpfen:Ich habe dies gerade getan, um ein Swift OpenGL „Hallo Welt“ auf ein paar Linux-Systemen zum Laufen zu bringen, und ich kann ein wenig mehr Details hinzufügen.

In meinem Fall brauchte ich sowohl OpenGL- als auch die GLUT-Funktionen, also habe ich zuerst ein COpenGL-Systemmodul erstellt. Die Quelle für dieses Modul kann auf GitHub gefunden werden, aber im Grunde ist es ein Verzeichnis mit zwei Dateien:eine leere Package.swift und die folgende module.modulemap:

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

Beachten Sie das große GL in den Header- und Link-Optionen, die ich benötigte, um Mesas Header und Bibliotheken abzugleichen.

Für die GLUT-Funktionen habe ich ein ähnliches CFreeGLUT-Modul (wieder auf GitHub) mit der folgenden module.modulemap erstellt:

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

Wenn Sie für die Anwendung den Swift Package Manager verwenden möchten, müssen Sie im Hauptverzeichnis eine Package.swift erstellen, die so aussieht:

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")
    ]
) 

Das Obige bezieht sich auf meine GitHub-Versionen der Systemmodule, aber Sie können die Pfade so bearbeiten, dass sie auf lokale Kopien verweisen, wenn Sie möchten.

Als Grundlage habe ich die „Hello World“-Anwendung des Red Book verwendet, die nach Swift-Konvertierung wie folgt aussieht:

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()

Platzieren Sie das in einem main.swift Datei im Unterverzeichnis Sources. Führen Sie swift build aus und der Swift Package Manager wird ausgehen, die Systemmodule herunterladen, die Anwendung erstellen und die Module damit verknüpfen.

Wenn Sie den Swift Package Manager nicht verwenden möchten, können Sie diese Systemmodule trotzdem manuell über die Befehlszeile verwenden. Laden Sie sie dazu in ein lokales Verzeichnis herunter und referenzieren Sie sie explizit beim Kompilieren:

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

Die Modulzuordnungen werden gelesen und Sie können von Ihrer Swift-Anwendung unter Linux aus auf OpenGL und die GLUT-Funktionen zugreifen.


Verwenden Sie ein Systemmodul, um die OpenGL-Header-Datei zu importieren:https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

Angenommen, Sie haben ein Verzeichnislayout wie:

COpenGL/
  Package.swift
  module.modulemap
  .git/

YourApp/
  Package.swift
  main.swift
  .git/

die Datei COpenGL/module.modulemap sieht etwa so aus:

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

Dies muss in einem separaten Git-Repo mit einem Versions-Tag erstellt werden:

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

Deklarieren Sie es dann als Abhängigkeit in der Datei YourApp/Package.swift

import PackageDescription

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

Dann können Sie es in Ihre main.swift-Datei importieren:

import COpenGL
// use opengl calls here...

Linux
  1. So verwenden Sie BusyBox unter Linux

  2. 5 Gründe, Linux im Jahr 2020 zu verwenden

  3. Wie ich Cron unter Linux verwende

  4. So verwenden Sie FIND unter Linux

  5. So verwenden Sie den Su-Befehl unter Linux

So verwenden Sie den Linux-SS-Befehl

So verwenden Sie den Linux-nohup-Befehl

So verwenden Sie Traceroute unter Kali Linux

So verwenden Sie den Linux-Bildschirm

So verwenden Sie du Command unter Linux

So verwenden Sie die Programmiersprache Swift in Ubuntu Linux