【问题标题】:call a java program from c program in linux从linux中的c程序调用java程序
【发布时间】:2015-11-21 05:58:51
【问题描述】:

在 CentOS 7 服务器上,我有一个 java 程序 /path/to/parent/bin/mainpackage/SendText.class,当我使用位于 /path/to/parent/bin 的 c 程序调用它时,它可以完美运行,语法如下:

system("java -cp .:\"/path/to/parent/dependencies/*\" mainpackage.SendText username pincode");  

但是问题是c程序不能定位到/path/to/parent/bin。相反,c 程序必须位于/path/to/parent/如何更改语法以便在从/path/to/parent/ 调用时运行 java 程序?

这是我到目前为止所做的设置:

java程序是使用命令从/path/to/anotherparent/编译的

javac -d bin -cp .:/path/to/anotherparent/dependencies/twilio-java-sdk-3.4.5.jar:/path/to/anotherparent/dependencies/httpcore-4.1.2.jar SendText.java

然后我创建了目的地并将 SendText.class 及其依赖项复制到目的地,如下所示:

[user@domain somedir]$ mkdir /path/to/parent/bin/
[user@domain somedir]$ mkdir /path/to/parent/bin/mainpackage
[user@domain somedir]$ sudo cp /home/username/javacode/bin/mainpackage/SendText.class /path/to/parent/bin/mainpackage
[user@domain somedir]$ sudo mkdir /path/to/parent/dependencies
[user@domain somedir]$ sudo cp -R /home/username/javacode/dependencies/* /path/to/parent/dependencies

接下来,我在/path/to/parent/中创建了c程序atest.c如下:

[user@domain somedir]$ cd /path/to/parent
[user@domain parent]$ sudo nano atest.c

int main (void){
    char jcmd[256] = "java -cp .:\"/path/to/parent/dependencies/*\" mainpackage.SendText username pincode";
    printf(jcmd);
    system(jcmd);
    return 0;
}

Ctrl-X to save the program  

我编译了c程序并尝试从/path/to/parent/运行如下:

[user@domain parent]$ sudo cc atest.c -o atest
[user@domain parent]$ ./atest
Error: Could not find or load main class mainpackage.SendText
java -cp .:"/path/to/parent/dependencies/*" mainpackage.SendText username pincode

为了确认问题出在c文件的位置,我做了以下操作:

[user@domain parent]$ sudo cp atest bin
[user@domain parent]$ cd /path/to/parent/bin
[user@domain bin]$ ./atest

程序从/path/to/parent/bin成功运行

那么当从/path/to/parent/ 使用命令./atest 调用java 程序时,为了让java 程序成功运行,我应该做些什么更改?

【问题讨论】:

    标签: java c linux centos javac


    【解决方案1】:
    javac -d bin ...
    

    这意味着bin作为绝对路径,在运行时必须出现在CLASSPATH中。更好的是,为 bin 的内容创建一个 JAR 文件,随意放置,并在执行时将 JAR 文件的绝对路径作为 CLASSPATH 元素提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多