2016-10-10 8 views
0

OpenGL library for Chez Scheme (리눅스 현재에만 설치)에 따라 부하 공유 객체는 GLUT 라이브러리를로드 : 체즈 방식 - 다음과 같이 플랫폼

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

가 여기에 해당 코드에 link입니다.

물론 우리는 라이브러리가 libglut.so.3이지만 Linux에서는 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")))) 

우리가 외국 라이브러리에 대한 우리의 바인딩 비슷한 일을 할 수 있도록 체즈 계획에 플랫폼을 확인하는 좋은 방법은 무엇입니까 :

다음은 플랫폼을 기반으로하는 방법 입실 제도로드 라이브러리의 예?

답변

2

:

(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 사용.