Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JRuby中加载GAMS Java API_Java_Ruby_Linux_Jruby_Gams Math - Fatal编程技术网

在JRuby中加载GAMS Java API

在JRuby中加载GAMS Java API,java,ruby,linux,jruby,gams-math,Java,Ruby,Linux,Jruby,Gams Math,我正在从事一个Java/JRuby项目,该项目需要能够与GAMS交互。我知道我们可以使用JavaAPI,但如果可能的话,我真的希望能够使用JRuby访问它,因为我们希望最终添加DSL和一些其他复杂性,我对必须用纯Java实现并不感到兴奋 遵循GAMS的官方JavaAPI,我已经从命令行下载并设置了运行GAMS所需的一切,但是我不知道如何在LD_LIBRARY_路径中包含GAMS目录,并且仍然运行JRuby irb。当我跑的时候 export-LD\u-LIBRARY\u-PATH=/home/w

我正在从事一个Java/JRuby项目,该项目需要能够与GAMS交互。我知道我们可以使用JavaAPI,但如果可能的话,我真的希望能够使用JRuby访问它,因为我们希望最终添加DSL和一些其他复杂性,我对必须用纯Java实现并不感到兴奋

遵循GAMS的官方JavaAPI,我已经从命令行下载并设置了运行GAMS所需的一切,但是我不知道如何在LD_LIBRARY_路径中包含GAMS目录,并且仍然运行JRuby irb。当我跑的时候

export-LD\u-LIBRARY\u-PATH=/home/wikk/Downloads/gams24.0\u-linux\u-x64\u-64\u-sfx

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

jruby:/home/wikk/Downloads/gams24.0\u linux\u x64\u 64\u sfx/libstdc++.so.6:找不到版本“GLIBCXX\u 3.4.15”(jruby需要)

我想这就是文档要求我运行一个调用API的Java程序所要做的,在导入所有Java类文件之前,是否有办法在irb中设置LD_LIBRARY_PATH?如果我不设置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特性?

最后回到这个问题,通过一些尝试和错误使其工作。我还需要使用
-J-Djava.library.path=[GAMSDIR]/apifiles/Java/api
标志运行jruby,并将
[GAMSDIR]/apifiles/Java/api/gamsjavapi.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

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

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

我现在已经在windows w/JRuby上实现了这一点,看起来我在上面的路径设置错误,您还需要设置java.library.path以使其正常工作。如果我能在linux上运行,我会发布一个答案