2016-10-10 63 views
0

OpenGL library for Chez Scheme(对于Linux目前只设置)负载共享对象加载glut库如下:桑切斯方案 - 基于平台

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

这里有一个link该代码。

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

下面是基于该平台如何地老虎计划负载库的例子:

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

什么是检查切斯方案的平台,让我们可以做我们的外国库绑定类似的好办法?

回答

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 
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-cond反而会给你会更有效运行时的行为,因为它会在编译时得到解决。