在 Linux 中从 C 程序调用 Java 程序

问题描述 投票:0回答:1

在 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/
中。如何更改语法以便 Java 程序在从
/path/to/parent/
调用时运行?

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

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

接下来,我在

atest.c
中创建了C程序
/path/to/parent/
,如下:

[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 c linux centos javac
1个回答
1
投票
javac -d bin ...

这意味着

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

© www.soinside.com 2019 - 2024. All rights reserved.