• 締切済み

perlのInline javaで実行エラー

お世話になっております。 perlで"use Inline Java"を用い、Javaのコードを呼び出そうとしておりますが、 実行時に、以下エラーが出てしまいます。 ■エラーメッセージ Failed to autogenerate /opt/batch/bin/.Inline/config-x86_64-linux-thread-multi-5.010001. ■ソース(抜粋) sub _xxxx4($$) { use Inline Java => <<'END'; class Pod_alu { public Pod_alu() {} public int add(int i, int j) { return i + j; } } END my $alu = new Pod_alu(); print ($alu->add(1,2) . "\n"); } ■バージョン情報 OS:CentOs6.2 perl:v5.20.2 Inline:0.80 Inlineのバージョンを変えたり、色々やっておりますが、 今のところ、解決できておりません。 同じようなご経験をされた方おられましたら、アドバイス お願いいたします。 よろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

Perlを実行しているユーザが、/opt以下の書き込み権限が無いという事はありませんか? >use Inline Config => DIRECTORY => './inline_dir'; 上記のようにディレクトリを指定できそうですが、 Perlの実行ユーザが書き込みできるディレクトリ(例/tmp/など)を指定しても同様のエラーがでてしまうでしょうか?

参考URL:
http://perldoc.jp/docs/modules/Inline-0.43/Inline.pod

関連するQ&A

  • PerlでInline Cを使った配列の引渡し

    Perlで繰り返し計算をする部分を高速化しようとInline Cを使ってC言語のサブルーチンを作りました。 C言語単体なら、巨大な配列はポインタを使って引き渡すのですが。 Inline Cを使って、PerlからCへの巨大配列の引渡し方法が分かりません(><; 以下のように、リファレンスで渡してポインタで受け取る事もできないし。。。助けてください use Inline C; my @data; for(my $t=0;$t<=10000000;$t++){ $data[$t]=$t; } # C言語による処理 my $x = my_function_1(\@data); print "0から10の合計は$x\n"; __END__ __C__ // サブルーチン_1 long my_function_1(long *data){ long t; long t1=0; for(t=0;t<=10000000;t++){ t1=t1+data[t]; } return t1; }

    • ベストアンサー
    • Perl
  • perl ハッシュ エラー

    現在perlの勉強中で、ハッシュの項目まできました。しかし、use strictにするとこのコードがエラーになります。 #!/usr/bin/perl use strict; use warnings; print "Content-type:text/html\n\n"; $hoge{"key1"} = "value1"; print $hoge{"key1"}; exit; ヴァージョンは5.8.9です。use strictをコメントアウトすればエラーはでません。どうしてエラーになってしまうのでしょうか?どうすればエラーを出さずに表示することができるのでしょうか?どうかご教授ください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • javaの配列でエラーが出ます。

    javaの配列でエラーが出ます。 先ほどもjavaの配列で質問させていただいたんですが、 また同じようなところでエラーが出ました。。。 マインスイーパーを作ろうとしているんですが、 周りにある爆弾の数を数えるところでエラーが出ます。 たびたび頼ってばかりで申し訳ありません。 一応自分なりに考えたのを以下に。。 爆弾があるというのはmine[][]==10であらわしています。 //フィールド int[][] mine=new int[9][9]; Random rnd=new Random(); //スレッド public void run(){ //爆弾生成 int yoko,tate; for(int i=0;i<=9;i++){ yoko=(rnd.nextInt()>>>1)%9; tate=(rnd.nextInt()>>>1)%9; if(mine[yoko][tate]!=10)mine[yoko][tate]=10; else i-- } kazugime(); }//本当はこの後に描画のループが続きます。 //数を代入するメソッド public void kazugime(){ int kazu=0; for(int i=0;i<=8;i++){ for(int j=0;j<=8;j++){ kazu=0; if(mine[i][j]!=10){ //上の段 if(i>=1&&j>=1){if(mine[i-1][j-1]==10)kazu++;} if(i>=1){if(mine[i-1][j]==10)kazu++;} if(i>=1&&j<=7){if(mine[i-1][j+1]==10)kazu++;} //真ん中の段 if(j>=1){if(mine[i][j-1]==10)kazu++;} if(j<=7){if(mine[i][j+1]==10)kazu++;} //下の段 if(i<=7&&j>=1){if(mine[i+1][j+1]==10)kazu++;} if(i<=7){if(mine[i+1][j]==10)kazu++;} if(i<=7&&j<=7){if(mine[i+1][j+1]==10)kazu++;} mine[i][j]=kazu; } } } エラーは Uncaught exception java/lang/ArrayIndexOutOfBoundsException です。 足らない部分があればご指摘お願いします。 どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • CygwinでPerlのCSV_XSを実行する

    Cygwin TerminalをWin7x64にインストールしました。 インストール完了後、Perlプログラムでuse Text::CSV_XSを実行すると Can't locate Text/CSV_XS.pm in @INC エラーが出てしまいます。 ・エラー Can't locate Text/CSV_XS.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int /usr/lib/perl5/site_perl/5.14 /usr/lib/perl5/vendor_perl/5.14/i686-cygwin-threads-64int /usr/lib/perl5/vendor_perl/5.14 /usr/lib/perl5/5.14/i686-cygwin-threads-64int /usr/lib/perl5/5.14 /usr/lib/perl5/site_perl/5.10 /usr/lib/perl5/vendor_perl/5.10 /usr/lib/perl5/site_perl/5.8 .) at mysql.pl line 11. ・やってみたこと perl -MCPAN -e shell install Text::CSV_XS を実行してみたのですがダメでした。 どのように対応すれば解決できますでしょうか? ご教授お願いします。

    • ベストアンサー
    • Perl
  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • Perlバージョン違いと use encoding;

    Perl 5.6とPerl 5.8の両方を使っています。 use encoding 'utf8';を 5.6で使うとエラーになるので バージョンを調べて条件分岐を行おうとしていますが、 use はどこに書いても実行される?ので、エラーが回避できません。 何か良い方法はあるのでしょうか? use encoding 'utf'; $|=1; print "Version=$]\n"; use utf8; if($] >= 5.008001){ print "*** PASS ***\n"; use encoding 'utf8'; }

    • ベストアンサー
    • Perl
  • エラーは出ませんが、実行結果ができません。

    このプログラムなんですが、エラーは出ませんが結果が 0群の項目1の正解率は0.000000です 1群の項目1の正解率は0.000000です 2群の項目1の正解率は0.000000です… この様になり、正解率がでません… 初心者で、わからないので困っています。 お願いします。 #include <stdio.h> #include <process.h> #define S 256 #define I 100 #define J 100 #define K 3 //グループの数 //#define M 50//サブコンテンツの数 void sum(int u[][J],int N,int n); void sort(int y[],int N,int u[][J],int n); void gunwake(int y[],int start,int N,int gunnum); void passege(int y[],int div[],int N,int num[],int u[][J],int n); static int y[I]; int div[K-1]; int divyouso=0; void main (void) { FILE *fp; int N=0,i=0,j=1,kou=0,n; //N:人数 n:問題数 static int u[I][J]; static int num[I]; char buf[S]; //ファイルオープン if ((fp=fopen("data_i2_1.csv","r"))==NULL){ printf("Can't open File\n"); exit(1); } // 問題数のカウント fgets(buf,S,fp); N+=1; while(buf[i]!='\n'){ kou=kou++; i+=1; } for(i=0;i<=kou;i=i+2){ u[N][j]=buf[i]-'0'; j=j++; } n=kou/2+1; // レコードの読み込み while (fgets(buf,256,fp)!=NULL){ N+=1; // 文字型から数値型へ変換 j=1; for(i=0;i<=kou;i=i+2){ u[N][j]=buf[i]-'0'; j=j++; } } sum(u,N,n); gunwake(y,0,N,K); passege(y,div,N,num,u,n); fclose(fp); } void sum(int u[][J],int N,int n) { //static int y[I]; int i,ii; //学習者iの得点の初期化 for(i=0;i<=I;i++) y[i]=0; //学習者iの得点の計算 for(i=1;i<=N;i++){ for(ii=1;ii<=n;ii++){ y[i]+=u[i][ii]; } } sort(y,N,u,n); } void sort(int y[],int N,int u[][J],int n) { int left,right,i,shift,t,v; static int num[I]; //学習者の番号記憶用変数numの初期化 for(i=0;i<=I;i++) num[i]=0; for(i=1;i<=N;i++) num[i]=i; //シェーカーソート left=0; right=N; while (left<right){ for(i=left;i<right;i++){ if(y[i]>y[i+1]){ t=y[i]; v=num[i]; y[i]=y[i+1]; num[i]=num[i+1]; y[i+1]=t; num[i+1]=v; shift=i; } } right=shift; for(i=right;i>left;i--){ if(y[i]<y[i-1]){ t=y[i]; v=num[i]; y[i]=y[i-1]; num[i]=num[i-1]; y[i-1]=t; num[i-1]=v; shift=i; } } left=shift; } } void gunwake(int y[],int start,int N,int gunnum){ int tmp; int i,up,down,real; if(gunnum>1){ tmp=N/gunnum+start; //printf("tmp:%d\n",tmp); for(i=tmp;y[tmp]==y[i];i--){ } down = i + 1; //printf("down:%d\n",down); for(i=tmp;y[tmp]==y[i];i++){ } up =i; //printf("up:%d/n",up); if(tmp-down > up-tmp) real=up; else real=down; div[divyouso]=real; divyouso++; printf("%d\n",real); gunwake(y,real,N-real,gunnum-1); } } void passege(int y[],int div[],int N,int num[],int u[][J],int n){ int div2[K+1]; int k=0,j,i; int pp[I][J]; div2[0]=0; div2[K]=n; for(i=0;i<K-1;i++){ div2[i+1]=div[i]; } for(k=0;k<K;k++){ for(j=0;j<n;j++){ pp[k][j]=0; for(i=div2[k];i<div2[k+1];i++){ pp[k][j]=pp[k][j]+u[num[i]][j]; } } } //確認 putchar('\n'); for(j=1;j<=n;j++){ for(k=0;k<K;k++){ printf("%d群の項目%dの正解率は%fです\n",k,j,pp[k][j]); } } }

  • perlでGD::Graph。実行でエラー

    OS: RedHatLinux7.2 perl -v : This is perl, v5.6.2 built for i686-linux HttpErrLog: display: Unable to connect to X server (). Premature end of script headers: /XXX/XXX/XXX.cgi GD::Graphを用いたperlスクリプトを実行すると、上記のようなエラーとなってしまいます。 コマンドでの実行では問題無く動作します。cgiのパーミッションも確認しました。ソースは以下の通りです。作業が進まなくて困っています。 どなたかお知恵をお貸しください。 perl.cgi: --------------------------------------------------------- #!/usr/bin/perl -- use strict; use GD::Graph::bars; my @xLabels = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); my @data2002 = qw( 17 19 26 38 56 64 67 53 40 29 21 13 ); my @data2003 = qw( 19 24 27 41 56 69 75 60 44 33 22 15 ); my @data = ( \@xLabels, \@data2002, \@data2003 ); my $graph = GD::Graph::bars->new( 800, 600 ); $graph->set( title => "Rainfall 2002/2003", y_label => "Millimetres" ); my $image = $graph->plot( \@data ) or die( "Cannot create image" ); open( OUT, "| display -") or die( "Cannot display image: $!" ); binmode OUT; print OUT $image->png(); close OUT; ---------------------------------------------------------

    • ベストアンサー
    • Perl
  • javaのOutOfMemoryErrorエラー

    毎度お世話になります。 void writeSync_Nword(DeviceHandle handle, int[] wordxxx)なるサブルーチンを 実行しますと、約500回に1回程度、下記の如く”OutOfMemoryError"エラーが発生します。 Q1)このエラーの対策につきまして、お教え頂けないでしょうか? Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Direct buffer memory at java.nio.Bits.reserveMemory(Bits.java:658) at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123) at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) at org.usb4java.BufferUtils.allocateByteBuffer(BufferUtils.java:44) at FUNC_test.writeSync_Nword(FUNC_test.java:100) //============================================== public static void writeSync_Nword(DeviceHandle handle, int[] wordxxx){ byte[] data=int2ByteN(wordxxx); //little_endianでbyteに変換 ByteBuffer buffer = BufferUtils.allocateByteBuffer(data.length); //<---ここでエラー発生 buffer.put(data); IntBuffer transferred=BufferUtils.allocateIntBuffer(); int result=LibUsb.bulkTransfer(handle, EP_OUTcmd, buffer, transferred, TIMEOUT); if (result != LibUsb.SUCCESS){ throw new LibUsbException("Unable to execute writeSync_Nword", result); } } //=========================== public static byte[] int2ByteN(int word[]){ int n_word=word.length; ByteBuffer byteBuffer=ByteBuffer.allocate(Integer.SIZE/Byte.SIZE*n_word); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); for(int i=0; i<n_word; i++){ byteBuffer.putInt(word[i]); } return byteBuffer.array(); } 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • JAVA3D実行時のエラー

    JAVA3Dを使って3次元で描画をしてみようかと思ったのですが セットアップしているときに以下のようなエラーがでてしまい 解決方法が分かりません どなたか、教えていただけないでしょうか? ---------------------------------------------------------------- Sample3D.java:5: com.sun.j3d.utils.geometry.ColorCube にアクセスできません。 クラスファイル C:\j2sdk1.4.2_14\jre\lib\ext\j3dutils.jar(com/sun/j3d/utils/geome try/ColorCube.class) は不正です。 クラスファイルのバージョン 49.0 は不正です。48.0 であるべきです。 削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。 import com.sun.j3d.utils.geometry.ColorCube; ^ エラー 1 個 ---------------------------------------------------------------- インストール環境は 今までは j2sdk1.4.2_14(win)を使っていました そこに java3d-1_5_0(win) インストールしようとしたという感じです よろしくお願いします

    • ベストアンサー
    • Java

専門家に質問してみよう