0

Chez Scheme的OpenGL 库(目前仅适用于 Linux)加载 GLUT 库,如下所示:

(define no-op (load-shared-object "libglut.so.3"))

这是该代码的链接。

当然,我们希望库libglut.so.3在 Linux 上加载,但GLUT.framework/GLUT在 macOS 上加载。

以下是 Ypsilon Scheme 如何基于平台加载库的示例:

(define libGLUT
  (cond
    (on-darwin  (load-shared-object "GLUT.framework/GLUT"))
    (on-windows (load-shared-object "glut32.dll"))
    (on-linux   (load-shared-object "libglut.so.3"))
    (on-freebsd (load-shared-object "libglut.so"))
    (on-openbsd (begin
             (load-shared-object "libXmu.so.10.0")
             (load-shared-object "libGLU.so.7.0")
             (load-shared-object "libglut.so.3.7")))
    (else
     (assertion-violation
      #f
          "can not locate GLUT library, unknown operating system"))))

在 Chez Scheme 上检查平台的好方法是什么,以便我们可以在绑定外国图书馆时做类似的事情?

4

2 回答 2

2

来自https://github.com/cisco/ChezScheme/blob/master/examples/socket.ss

(case (machine-type)
  [(i3le ti3le) (load-shared-object "libc.so.6")]
  [(i3osx ti3osx a6osx ta6osx) (load-shared-object "libc.dylib")]
  [else (load-shared-object "libc.so")])

使用meta-condinstead 会给你稍微更有效的运行时行为,因为它将在编译时解决。

于 2016-10-11T14:25:20.093 回答
1

怎么样(machine-type)

~ % uname -m -p -r -s
Darwin 15.6.0 x86_64 i386
~ % chez
Chez Scheme Version 9.4.1
Copyright 1984-2016 Cisco Systems, Inc.

> (machine-type)
ta6osx
于 2016-10-11T11:07:01.207 回答