【问题标题】:chez scheme - load-shared-object based on platformchez 方案 - 基于平台的负载共享对象
【发布时间】:2016-10-10 23:32:15
【问题描述】:

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

以下是 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 上检查平台的好方法是什么,以便我们可以在绑定外国图书馆时做类似的事情?

【问题讨论】:

    标签: scheme chez-scheme


    【解决方案1】:

    来自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 会稍微提高运行时行为的效率,因为它将在编译时解决。

    【讨论】:

      【解决方案2】:

      (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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-04
        • 2013-11-06
        • 2023-03-10
        • 1970-01-01
        • 2017-04-08
        • 1970-01-01
        • 2023-04-06
        • 2011-07-28
        相关资源
        最近更新 更多