GNU/Linux >> Znalost Linux >  >> Linux

Použijte knihovnu C ve Swift na Linuxu

Abych navázal na skvělou odpověď MBuhota, právě jsem to udělal, abych zprovoznil „ahoj světe“ Swift OpenGL na několika systémech Linux a mohu přidat trochu více podrobností.

V mém případě jsem potřeboval funkce OpenGL i GLUT, takže jsem nejprve vytvořil modul systému COpenGL. Zdroj tohoto modulu lze nalézt na GitHubu, ale v zásadě se jedná o adresář se dvěma soubory:prázdný Package.swift a následující module.modulemap:

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

Všimněte si velkého GL v možnostech záhlaví a odkazu, které jsem potřeboval, aby odpovídaly záhlavím a knihovnám Mesa.

Pro funkce GLUT jsem vytvořil podobný modul CFreeGLUT (opět na GitHubu) s následujícím modulem.modulemap:

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

Pokud chcete pro aplikaci používat Správce balíčků Swift, musíte v hlavním adresáři vytvořit Package.swift, který vypadá takto:

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

Výše uvedené pochází z mých verzí systémových modulů na GitHubu, ale pokud chcete, můžete upravit cesty tak, aby odkazovaly na místní kopie.

Jako základ jsem použil aplikaci „hello world“ od Červené knihy, která po převedení na Swift vypadá následovně:

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

Umístěte to do main.swift soubor v podadresáři Sources. Spusťte swift build a Swift Package Manager se spustí, stáhne systémové moduly, sestaví aplikaci a propojí moduly s ní.

Pokud nechcete používat Swift Package Manager, stále můžete tyto systémové moduly používat ručně z příkazového řádku. Chcete-li tak učinit, stáhněte si je do místního adresáře a při kompilaci na ně výslovně odkazujte:

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

Mapy modulů budou načteny a budete mít přístup k OpenGL a funkcím GLUT z vaší aplikace Swift na Linuxu.


K importu souboru záhlaví OpenGL použijte systémový modul:https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

Za předpokladu, že máte rozložení adresářů jako:

COpenGL/
  Package.swift
  module.modulemap
  .git/

YourApp/
  Package.swift
  main.swift
  .git/

soubor COpenGL/module.modulemap bude vypadat nějak takto:

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

Toto musí být vytvořeno v samostatném git repo se značkou verze:

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

Poté jej deklarujte jako závislost v souboru YourApp/Package.swift

import PackageDescription

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

Poté jej můžete importovat do souboru main.swift:

import COpenGL
// use opengl calls here...

Linux
  1. Jak používat BusyBox na Linuxu

  2. 5 důvodů, proč používat Linux v roce 2020

  3. Jak používám cron v Linuxu

  1. Jak používat FIND v Linuxu

  2. Jak používat Unzip v Linuxu

  3. V Linuxu je možné použít .dll

  1. Jak používám nastavení usnadnění přístupu v systému Linux

  2. Jak používat Su Command v Linuxu

  3. Linux – použití O_direct na Linuxu?