【问题标题】:Loading GAMS Java API in JRuby在 JRuby 中加载 GAMS Java API
【发布时间】:2013-05-22 20:52:17
【问题描述】:

我正在开发一个需要能够与 GAMS 交互的 Java/JRuby 项目。我知道我们可以使用 Java API,但如果可能的话,我真的希望能够使用 JRuby 访问它,因为我们希望最终添加 DSL 和其他一些复杂性,我对必须在纯 Java。

按照 GAMS 的官方 Java API documentation,我已经下载并设置了从命令行运行 GAMS 所需的一切,但我不知道如何在 LD_LIBRARY_PATH 中包含 GAMS 目录并仍然运行 JRuby irb。当我跑步时

export LD_LIBRARY_PATH=/home/wikk/Downloads/gams24.0_linux_x64_64_sfx

然后尝试用JRuby运行irb,我明白了

jruby: /home/wikk/Downloads/gams24.0_linux_x64_64_sfx/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found (required by jruby)

我认为这是文档要求我运行调用 API 的 Java 程序的方法,有没有办法在 irb 中设置 LD_LIBRARY_PATH,但在导入所有 Java 类文件之前?如果我不设置 LD_LIBRARY_PATH,我可以成功地做到这一点,但是当我尝试创建一个新的 GAMSWorkspace 对象时,GAMS 告诉我它找不到主程序:

irb(main):002:0> ws = GAMSWorkspace.new
Java::ComGamsApi::GAMSException: could not find a GAMS system directory from 
your environment variable, please set up properly before running a program!
  from com.gams.api.GAMSWorkspace.verifySystemDirectory(GAMSWorkspace.java:335)

我做错了吗?还是 API 需要一些 JRuby 中未实现的 Java 功能?

【问题讨论】:

  • 我现在已经在带有 JRuby 的 windows 上运行了这个,看起来我在上面设置了错误的路径,你需要设置 java.library.path 才能让它工作适当地。如果我能在 linux 上运行它,我会发布答案

标签: java ruby linux jruby gams-math


【解决方案1】:

终于回到了这个问题,通过一些试验和错误让它工作。我还需要使用-J-Djava.library.path=[GAMSDIR]/apifiles/Java/api 标志运行jruby,并将[GAMSDIR]/apifiles/Java/api/GAMSJavaAPI.jar 添加到类路径中。

一切就绪后,您可以从 ruby​​ 脚本运行 gams 模型:

    import com.gams.api.GAMSWorkspace
    import com.gams.api.GAMSJob
    import com.gams.api.GAMSVariable
    import com.gams.api.GAMSVariableRecord
    import com.gams.api.GAMSWorkspace

    ws = GAMSWorkspace.new

    j1 = ws.addJobFromGamsLib('trnsport')

    j1.run

    j1.out_db.get_variable('x').each_entry do |rec|
      puts "x(#{rec.get_keys[0]}, #{rec.get_keys[1]}): level = #{rec.get_level},   marginal = #{rec.get_marginal}"
    end

【讨论】:

    【解决方案2】:

    我写在这里是因为它是唯一与 GAMS Java API 问题相关的线程。

    在 Eclipse 中,您必须转到“运行配置”并添加两件事: 1.(如前所述)在 VM 参数中添加“-Djava.library.path=[GAMSDIR]\apifiles\Java\api\” 2. 转到环境并显式设置一个 PATH 变量到 [GAMSDIR]。由于某种原因,通过窗口查看路径不起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多