Search code examples
c++linuxsystemexecvp

error occur when I call execvp to run java


I use chdir() to switch the directory, and then use execvp() to execute "java Main". I'm sure there is Main.class, but something went wrong. I want to know why.

#include <cstdio>
#include <unistd.h>
using namespace std;
int main(){
    char buf[80];
    getcwd(buf,sizeof(buf));
    printf("current working directory: %s\n", buf);
    chdir("/home/keane/Judge/temp");
    getcwd(buf,sizeof(buf));
    printf("current working directory: %s\n", buf);
    char *array[3];
    array[0] = "java";
    array[1] = "Main";
    array[2] = NULL;
    execvp("java", array);
    return 0;
}

the error is could not find the main class , and I can run java Main in that directory.

What drives me crazy is that I can't use system("java Main"), and the error is that Error: Could not find or load main class Main, and it's just like this on my computer

update:

#include <unistd.h>
#include <cstdlib>
int main(){
    chdir("/home/keane/Judge/temp");
    system("pwd");
    system("ls");
    system("java Main");
    return 0;
}

the output on console is:

/home/keane/Judge/temp
1.out  3.out  5.out   Main.class  stdout_spj.txt
2.out  4.out  ce.txt  Main.java
Error: Could not find or load the main class Main

my final solution is to reboot the computer and add -cp . to the java command. althought I don't why is necessary. thanks everyone!


Solution

  • This works as intended on my system, maybe you need to add -cp . to your java call.

    EDIT: to elaborate: -cp (for classpath) tells java where to look for user provided .class files. This does not necessarily include the current working directory by default.