簡體   English   中英

從Linux中的C程序調用Java程序

[英]call a java program from c program in linux

在CentOS 7服務器上,我有一個Java程序/path/to/parent/bin/mainpackage/SendText.class ,當我使用以下語法從位於/path/to/parent/bin ac程序調用它時,它可以完美地工作:

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

但是問題是c程序不能位於/path/to/parent/bin 相反,c程序必須位於/path/to/parent/ 如何更改語法,以便從/path/to/parent/調用時運行Java程序?

到目前為止,我已經完成了以下工作:

使用以下命令從/path/to/anotherparent/編譯Java程序

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成功運行

那么,當使用./atest命令從/path/to/parent/調用java程序時,如何使java程序成功運行呢?

javac -d bin ...

這意味着bin絕對路徑必須在運行時顯示在CLASSPATH中。 更好的是,為bin的內容創建一個JAR文件,將其放置在任意位置,並在執行時將JAR文件的絕對路徑作為CLASSPATH元素提供。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM