GNU/Linux >> Tutoriales Linux >  >> Linux

Use una biblioteca C en Swift en Linux

Para continuar con la excelente respuesta de MBuhot, solo hice esto para obtener un "hola mundo" de Swift OpenGL ejecutándose en un par de sistemas Linux y puedo agregar un poco más de detalle.

En mi caso, necesitaba las funciones OpenGL y GLUT, así que primero creé un módulo de sistema COpenGL. El código fuente de este módulo se puede encontrar en GitHub, pero básicamente es un directorio con dos archivos:un Package.swift vacío y el siguiente module.modulemap:

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

Tenga en cuenta el GL mayúscula en las opciones de encabezado y enlace, que necesitaba para que coincida con los encabezados y las bibliotecas de Mesa.

Para las funciones GLUT, creé un módulo CFreeGLUT similar (nuevamente, en GitHub) con el siguiente módulo.modulemap:

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

Para la aplicación, si desea utilizar Swift Package Manager, deberá crear un Package.swift en el directorio principal que se ve así:

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

Lo anterior se extrae de mis versiones de GitHub de los módulos del sistema, pero puede editar las rutas para que apunten a copias locales, si lo desea.

Utilicé la aplicación "hola mundo" del Libro Rojo como base, que se parece a lo siguiente cuando se convierte a 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()

Coloque eso en un main.swift dentro del subdirectorio Fuentes. Ejecute swift build y Swift Package Manager saldrá, descargará los módulos del sistema, compilará la aplicación y vinculará los módulos contra ella.

Si no desea utilizar Swift Package Manager, aún puede utilizar manualmente estos módulos del sistema desde la línea de comandos. Para hacerlo, descárguelos en un directorio local y haga referencia explícita a ellos al compilar:

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

Se leerán los mapas del módulo y podrá acceder a OpenGL y las funciones GLUT desde su aplicación Swift en Linux.


Utilice un módulo del sistema para importar el archivo de encabezado de OpenGL:https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

Suponiendo que tiene un diseño de directorio como:

COpenGL/
  Package.swift
  module.modulemap
  .git/

YourApp/
  Package.swift
  main.swift
  .git/

el archivo COpenGL/module.modulemap se parecerá a:

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

Esto debe crearse en un repositorio git separado, con una etiqueta de versión:

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

Luego declárelo como una dependencia en el archivo YourApp/Package.swift

import PackageDescription

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

Luego, en su archivo main.swift puede importarlo:

import COpenGL
// use opengl calls here...

Linux
  1. Cómo usar BusyBox en Linux

  2. 5 razones para usar Linux en 2020

  3. Cómo uso cron en Linux

  4. Cómo usar BUSCAR en Linux

  5. Posible usar un .dll en Linux

Cómo usar el comando SS de Linux

Cómo usar el comando nohup de Linux

Cómo usar traceroute en Kali Linux

Cómo usar la pantalla de Linux

Cómo usar du Command en Linux

Cómo usar el lenguaje de programación Swift en Ubuntu Linux