GNU/Linux >> Linux Esercitazione >  >> Linux

Usa una libreria C in Swift su Linux

Per seguire l'eccellente risposta di MBuhot, l'ho appena fatto per far funzionare un "hello world" di Swift OpenGL su un paio di sistemi Linux e posso aggiungere qualche dettaglio in più.

Nel mio caso, avevo bisogno sia di OpenGL che delle funzioni GLUT, quindi ho prima creato un modulo di sistema COngGL. Il sorgente di questo modulo può essere trovato su GitHub, ma fondamentalmente è una directory con due file:un Package.swift vuoto e il seguente module.modulemap:

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

Nota la GL maiuscola nelle opzioni di intestazione e collegamento, di cui avevo bisogno per abbinare le intestazioni e le librerie di Mesa.

Per le funzioni GLUT, ho creato un modulo CFreeGLUT simile (di nuovo, su GitHub) con il seguente module.modulemap:

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

Per l'applicazione, se desideri utilizzare Swift Package Manager, dovrai creare un Package.swift nella directory principale che assomigli a questo:

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

Quanto sopra estrae dalle mie versioni GitHub dei moduli di sistema, ma puoi modificare i percorsi in modo che puntino a copie locali, se lo desideri.

Come base ho usato l'applicazione "ciao mondo" del Red Book, che una volta convertita in Swift ha l'aspetto seguente:

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

Mettilo in un main.swift file all'interno della sottodirectory Sources. Esegui swift build e lo Swift Package Manager uscirà, scaricherà i moduli di sistema, creerà l'applicazione e collegherà i moduli ad essa.

Se non desideri utilizzare Swift Package Manager, puoi comunque utilizzare manualmente questi moduli di sistema dalla riga di comando. Per farlo, scaricateli in una directory locale e fatevi riferimento esplicitamente durante la compilazione:

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

Le mappe dei moduli verranno lette e sarai in grado di accedere a OpenGL e alle funzioni GLUT dall'interno della tua applicazione Swift su Linux.


Usa un modulo di sistema per importare il file di intestazione OpenGL:https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

Supponendo che tu abbia un layout di directory come:

COpenGL/
  Package.swift
  module.modulemap
  .git/

YourApp/
  Package.swift
  main.swift
  .git/

il file COpenGL/module.modulemap avrà un aspetto simile a:

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

Questo deve essere creato in un repository git separato, con un tag di versione:

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

Quindi dichiaralo come dipendenza nel file YourApp/Package.swift

import PackageDescription

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

Quindi nel tuo file main.swift puoi importarlo:

import COpenGL
// use opengl calls here...

Linux
  1. Come usare BusyBox su Linux

  2. 5 motivi per usare Linux nel 2020

  3. Come uso cron in Linux

  4. Come usare TROVA in Linux

  5. Come usare Unzip in Linux

Come utilizzare il comando SS di Linux

Come usare il comando nohup di Linux

Come usare traceroute su Kali Linux

Come utilizzare lo schermo Linux

Come usare du Command in Linux

Come utilizzare il linguaggio di programmazione Swift in Ubuntu Linux