Ich weiß, wie auf C-Bibliotheken in Swift mit Xcode auf Mac OS zugreifen, und ich weiß über import Glibc
unter Linux, aber wie kann ich eine C-Bibliothek wie OpenGL mit Swift unter Linux verwenden?Verwenden Sie eine C-Bibliothek in Swift unter Linux
Antwort
ein System-Modul Verwenden Sie die OpenGL-Header-Datei zu importieren: https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md
Vorausgesetzt Sie haben eine Verzeichnisstruktur haben wie:
COpenGL/
Package.swift
module.modulemap
.git/
YourApp/
Package.swift
main.swift
.git/
die COpenGL/module.modulemap Datei etwas aussehen wird:
module COpenGL [system] {
header "/usr/include/gl/gl.h"
link "gl"
export *
}
Dies muss in einem separaten Git Repo mit einem Versionstag erstellt werden:
touch Package.swift
git init
git add .
git commit -m "Initial Commit"
git tag 1.0.0
Dann erklären sie als Abhängigkeit in YourApp/Package.swift Datei
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "../COpenGL", majorVersion: 1)
]
)
Dann in Ihrem main.swift Datei können Sie es importieren:
import COpenGL
// use opengl calls here...
Um zu MBuhot die folgen auf ausgezeichnete Antwort, ich habe dies getan, um eine Swift OpenGL "Hallo Welt" auf ein paar Linux-Systemen laufen zu lassen und ich kann ein wenig mehr Details hinzufügen.
In meinem Fall brauchte ich sowohl OpenGL und die GLUT-Funktionen, also habe ich zuerst ein COpenGL-System-Modul erstellt. Die Quelle für dieses Modul can be found on GitHub, 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 *
}
Notiere die Hauptstadt GL in den Kopf- und Verknüpfungsoptionen, die ich brauchte, um die Header und Bibliotheken von Mesa zu vergleichen.
Für die GLUT Funktionen, ich ein ähnliches CFreeGLUT Modul erstellt (wieder on GitHub) mit folgendem module.modulemap:
module CFreeGLUT [system] {
header "/usr/include/GL/freeglut.h"
link "glut"
export *
}
Für die Anwendung, wenn Sie die Swift Package Manager verwenden möchten, ‚Sie ll braucht eine Package.swift im Hauptverzeichnis zu erstellen, die wie folgt aussehen:
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "https://github.com/BradLarson/COpenGL.git", majorVersion: 1),
.Package(url: "https://github.com/BradLarson/CFreeGLUT.git", majorVersion: 1)
]
)
die oben zieht aus meiner GitHub Version der Systemmodule, aber Sie können die Pfade bearbeiten, um sie an den lokalen Kopien verweisen zu haben, wenn du willst.
ich verwenden, um den Red Book „Hallo Welt“ -Anwendung als meine Basis, die wie folgt aussieht, wenn Swift konvertierte:
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 = Process.argc
glutInit(&localArgc, Process.unsafeArgv)
glutInitDisplayMode(UInt32(GLUT_SINGLE))
glutInitWindowSize(500,500)
glutInitWindowPosition(100,100)
glutCreateWindow("OpenGL - First window demo")
glutDisplayFunc(renderFunction)
glutMainLoop()
Ort, der in eine main.swift
Datei innerhalb des Quellen-Unterverzeichnisses. Führen Sie swift build
aus und der Swift Package Manager wird ausgehen, die Systemmodule herunterladen, die Anwendung erstellen und die Module dagegen verknüpfen.
Wenn Sie den Swift Package Manager nicht verwenden möchten, können Sie diese Systemmodule weiterhin manuell über die Befehlszeile verwenden.Dazu laden Sie sie in ein lokales Verzeichnis und explizit Referenz beim Kompilieren:
swiftc -I ./COpenGL -I ./CFreeGLUT main.swift
Die Modul Karten werden gelesen, und Sie werden in der Lage OpenGL zugreifen und die GLUT-Funktionen aus Ihrer Swift-Anwendung auf Linux .
- 1. Möglich, eine .dll unter Linux zu verwenden
- 2. Verwenden Sie eine gemischte (verwaltet/unmanaged) DLL unter Linux (Mono)
- 3. Installieren Sie Swift 3 + libdispatch unter Linux mit Ansible
- 4. Verwenden von JProfiler unter Linux
- 5. libswiftDemangle.so unter Linux
- 6. Welche IDE/Editor verwenden Sie für Ruby unter Linux?
- 7. Öffnen Sie eine Datei in Rx unter Linux
- 8. Golang: Wie syscall.Syscall unter Linux verwenden?
- 9. Wann verwenden Sie in swift?
- 10. Verwenden von Parse Server unter Linux (Webpanel)
- 11. das setuid Bit unter Linux verwenden
- 12. Wie würden Sie unter Linux eine "pixelperfekte" GUI erstellen?
- 13. Kompilieren Sie den C-Code und stellen Sie ihn Swift unter Linux zur Verfügung.
- 14. Ist es möglich, GNU Scientific Library in Swift (unter Linux) zu verwenden?
- 15. Swift 2.2 unter Linux, "Verwendung von unaufgelösten Identifier 'Exit'"
- 16. C++ Flash unter Linux
- 17. Stellen Sie ein Qt-Projekt unter Linux
- 18. windeployqt.exe unter Linux-Distributionen
- 19. Verwenden Sie Funktion, um Struktureigenschaften in Swift
- 20. Echtzeit-Audioanalyse unter Linux
- 21. Standardgateway in C unter Linux
- 22. Beep unter Linux in C
- 23. Programmierung Webcam unter Linux
- 24. UDP in C++ unter Linux
- 25. Monitor Batteriestatus unter Linux
- 26. MASM unter Linux?
- 27. Wie erkennen Sie ausstehende Systemabschaltung unter Linux?
- 28. arpalert unter Linux
- 29. Verwenden Sie dll Win32 in Linux-Plattformen
- 30. tchar.h unter Linux
Keine Antwort, aber gutes Beispiel https://github.com/sakrist/Swift_OpenGL_Example – SAKrisT