GNU/Linux >> Linux の 問題 >  >> Linux

Linux 上の Swift で C ライブラリを使用する

MBuhot の優れた回答に続き、いくつかの Linux システムで Swift OpenGL の「hello world」を実行するためにこれを行いました。もう少し詳細を追加できます。

私の場合、OpenGL と GLUT 関数の両方が必要だったので、最初に COpenGL システム モジュールを作成しました。このモジュールのソースは GitHub にありますが、基本的には空の Package.swift と次の module.modulemap の 2 つのファイルを含むディレクトリです:

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

Mesa のヘッダーとライブラリを一致させるために必要だった、ヘッダーとリンク オプションの大文字の GL に注意してください。

GLUT 関数については、次の module.modulemap を使用して同様の CFreeGLUT モジュールを作成しました (これも GitHub にあります)。

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

アプリケーションで Swift Package Manager を使用する場合は、メイン ディレクトリに Package.swift を次のように作成する必要があります。

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

上記は、私の GitHub バージョンのシステム モジュールから取得したものですが、必要に応じてパスを編集してローカル コピーを指すようにすることもできます。

Red Book の「hello world」アプリケーションをベースとして使用しました。これを 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()

それを main.swift に入れます Sources サブディレクトリ内のファイル。 swift build を実行 Swift Package Manager が起動し、システム モジュールをダウンロードし、アプリケーションをビルドして、モジュールをリンクします。

Swift Package Manager を使用したくない場合でも、これらのシステム モジュールをコマンド ラインから手動で使用できます。これを行うには、それらをローカル ディレクトリにダウンロードし、コンパイル時に明示的に参照します。

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

モジュール マップが読み込まれ、Linux 上の Swift アプリケーション内から OpenGL と GLUT 関数にアクセスできるようになります。


システム モジュールを使用して OpenGL ヘッダー ファイルをインポートします:https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

次のようなディレクトリ レイアウトがあるとします:

COpenGL/
  Package.swift
  module.modulemap
  .git/

YourApp/
  Package.swift
  main.swift
  .git/

COpenGL/module.modulemap ファイルは次のようになります:

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

これは、バージョン タグを使用して別の git リポジトリに作成する必要があります:

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

次に、YourApp/Package.swift ファイルで依存関係として宣言します

import PackageDescription

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

次に、main.swift ファイルにインポートできます:

import COpenGL
// use opengl calls here...

Linux
  1. LinuxでBusyBoxを使用する方法

  2. 2020年にLinuxを使用する5つの理由

  3. LinuxでUnzipを使用する方法

  1. Linuxでcronを使用する方法

  2. LinuxでFINDを使用する方法

  3. LinuxでSuコマンドを使用する方法

  1. Linuxのアクセシビリティ設定の使用方法

  2. Linux – LinuxでのO_directの使用?

  3. Linux で .dll を使用可能