Tôi biết cách truy cập thư viện C trong Swift bằng Xcode trên Mac OS và tôi biết về import Glibc
trên Linux, nhưng làm cách nào tôi có thể sử dụng thư viện C như OpenGL với Swift trên Linux?Sử dụng thư viện C trong Swift trên Linux
Trả lời
Sử dụng một mô-đun hệ thống để nhập khẩu các tập tin tiêu đề OpenGL: https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md
Giả sử bạn có một bố trí thư mục như:
COpenGL/
Package.swift
module.modulemap
.git/
YourApp/
Package.swift
main.swift
.git/
các COpenGL tập tin/module.modulemap sẽ giống như thế:
module COpenGL [system] {
header "/usr/include/gl/gl.h"
link "gl"
export *
}
Điều này phải được tạo trong một repo git riêng biệt, với thẻ phiên bản:
touch Package.swift
git init
git add .
git commit -m "Initial Commit"
git tag 1.0.0
Sau đó, tuyên bố nó như là một sự phụ thuộc vào yourapp/Package.swift nộp
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "../COpenGL", majorVersion: 1)
]
)
Sau đó, trong tập tin main.swift của bạn, bạn có thể nhập nó:
import COpenGL
// use opengl calls here...
Để theo dõi luôn của MBuhot Câu trả lời tuyệt vời, tôi chỉ làm điều này để có được một Swift OpenGL "hello world" chạy trên một vài hệ thống Linux và tôi có thể thêm chi tiết hơn một chút.
Trong trường hợp của tôi, tôi cần cả OpenGL và các chức năng GLUT, vì vậy lần đầu tiên tôi tạo ra một mô-đun hệ thống COpenGL. Nguồn tin cho module này can be found on GitHub, nhưng về cơ bản nó là một thư mục với hai tập tin: một Package.swift trống rỗng, và module.modulemap sau:
module COpenGL [system] {
header "/usr/include/GL/gl.h"
link "GL"
export *
}
Lưu ý GL vốn trong các tùy chọn tiêu đề và liên kết, mà tôi cần để phù hợp với tiêu đề và thư viện của Mesa.
Đối với các chức năng thị trường bất động, tôi đã tạo ra một mô-đun tương tự CFreeGLUT (một lần nữa, on GitHub) với module.modulemap sau:
module CFreeGLUT [system] {
header "/usr/include/GL/freeglut.h"
link "glut"
export *
}
Đối với các ứng dụng, nếu bạn muốn sử dụng Quản lý Swift Package, bạn' sẽ cần phải tạo ra một Package.swift trong thư mục chính mà trông như thế này:
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)
]
)
các Kéo trên từ phiên bản GitHub của tôi về các module hệ thống, nhưng bạn có thể chỉnh sửa các đường dẫn có họ trỏ đến các bản sao địa phương, nếu bạn muốn.
tôi đã sử dụng ứng dụng "hello world" Sách của Red làm cơ sở của tôi, trông giống như sau khi chuyển đổi sang 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 = Process.argc
glutInit(&localArgc, Process.unsafeArgv)
glutInitDisplayMode(UInt32(GLUT_SINGLE))
glutInitWindowSize(500,500)
glutInitWindowPosition(100,100)
glutCreateWindow("OpenGL - First window demo")
glutDisplayFunc(renderFunction)
glutMainLoop()
Nơi đó vào một tập tin main.swift
trong thư mục con Sources. Chạy swift build
và Trình quản lý gói Swift sẽ đi ra ngoài, tải xuống các mô-đun hệ thống, xây dựng ứng dụng và liên kết các mô-đun với nó.
Nếu bạn không muốn sử dụng Trình quản lý gói Swift, bạn vẫn có thể sử dụng thủ công các mô-đun hệ thống này từ dòng lệnh.Để làm như vậy, tải chúng vào một thư mục địa phương và dứt khoát tham khảo chúng khi biên dịch:
swiftc -I ./COpenGL -I ./CFreeGLUT main.swift
Các bản đồ mô-đun sẽ được đọc và bạn sẽ có thể truy cập OpenGL và các chức năng thị trường bất động từ bên trong ứng dụng Swift của bạn trên Linux .
- 1. Thư viện webcam cho C trên Linux?
- 2. Sử dụng C thư viện trong Android trên NDK
- 3. Thư viện được chia sẻ Linux C++
- 4. Cách sử dụng thư viện C như PJSIP trên java?
- 5. đúng sử dụng thư viện obj-C trong dự án Swift
- 6. Swift: Không thể sử dụng thư viện từ tệp Pod
- 7. Lập trình trong Swift trên Linux
- 8. Sử dụng thư viện tăng C++?
- 9. Tải xuống tệp từ web trong C++ mà không sử dụng thư viện không chuẩn trên Linux
- 10. Thư viện C# trên iOS
- 11. Cách khởi tạo thư viện dùng chung trên Linux
- 12. C++: Tôi nên sử dụng thư viện regex nào?
- 13. Bíp trên Linux trong C
- 14. Sử dụng thư viện FST trong python
- 15. Đo kích thước thư viện trong Linux
- 16. Sử dụng API thư viện java .jar trong C#?
- 17. Thư viện C để đọc phiên bản EXE từ Linux?
- 18. Thư viện tệp cấu hình Linux
- 19. GUI/thư viện TUI linux
- 20. Sử dụng thư viện c/C++ sử dụng mạng cho mục tiêu ứng dụng iphone c
- 21. Sử dụng CXXI để bọc các thư viện C++
- 22. Sử dụng thư viện C từ mã C#
- 23. Thư viện xem thư mục/tệp trong C/C++
- 24. thư viện mp3 C++
- 25. Sử dụng tệp INI trong C trên Linux
- 26. thư viện c/C++ nào có thể được sử dụng để xử lý các kết nối wifi cho Linux?
- 27. Tách thư viện chia sẻ linux
- 28. Làm thế nào để gọi thư viện c từ mã lắp ráp trên Linux?
- 29. Thư viện toán học nhanh hơn glibc trên x86_64/linux?
- 30. thư viện sqlite c trên mac os?
Không trả lời, nhưng ví dụ điển hình https://github.com/sakrist/Swift_OpenGL_Example – SAKrisT