g++;:找不到文件 我最近开发了一个程序,编译并运行一个java程序的C++程序,我已经基本上完成了所有的工作(至少我的知识),但是后来我注意到一些东西被打印到错误流: cdog5000@srv3:~$ java -Xmx50m -jar main2.jar Running Command: sudo g++ --static -o "/home/cdog5000/cody.out" "/home/cdog5000/cody.cpp" Err: g++: "/home/cdog5000/cody.cpp": No such file or directory Err: g++: no input files cdog5000@srv3:~$ ls -l total 4548 -rwxr-xr-x 1 cdog5000 cdog5000 1297588 Feb 3 23:11 a.out -rwxr-xr-x 1 cdog5000 cdog5000 7978 Feb 2 04:39 cody -rw-r--r-- 1 cdog5000 cdog5000 106 Feb 4 02:09 cody.cpp -rwxr-xr-x 1 cdog5000 cdog5000 1297357 Feb 4 02:09 cody.out -rw-r--r-- 1 root root 410433 Feb 4 02:48 log.txt -rwxr-xr-x 1 cdog5000 cdog5000 801088 Feb 1 05:24 main.jar -rw-r--r-- 1 cdog5000 cdog5000 804802 Feb 4 02:49 main2.jar drwxr-xr-x 3 cdog5000 cdog5000 4096 Feb 3 23:11 sandbox cdog5000@srv3:~$ sudo g++ --static -o "/home/cdog5000/cody.out" "/home/cdog5000/cody.cpp"
正如您所看到的,如果我通过SSH而不是Java代码来实现,它会工作吗 Java代码:g++;:找不到文件 我最近开发了一个程序,编译并运行一个java程序的C++程序,我已经基本上完成了所有的工作(至少我的知识),但是后来我注意到一些东西被打印到错误流: cdog5000@srv3:~$ java -Xmx50m -jar main2.jar Running Command: sudo g++ --static -o "/home/cdog5000/cody.out" "/home/cdog5000/cody.cpp" Err: g++: "/home/cdog5000/cody.cpp": No such file or directory Err: g++: no input files cdog5000@srv3:~$ ls -l total 4548 -rwxr-xr-x 1 cdog5000 cdog5000 1297588 Feb 3 23:11 a.out -rwxr-xr-x 1 cdog5000 cdog5000 7978 Feb 2 04:39 cody -rw-r--r-- 1 cdog5000 cdog5000 106 Feb 4 02:09 cody.cpp -rwxr-xr-x 1 cdog5000 cdog5000 1297357 Feb 4 02:09 cody.out -rw-r--r-- 1 root root 410433 Feb 4 02:48 log.txt -rwxr-xr-x 1 cdog5000 cdog5000 801088 Feb 1 05:24 main.jar -rw-r--r-- 1 cdog5000 cdog5000 804802 Feb 4 02:49 main2.jar drwxr-xr-x 3 cdog5000 cdog5000 4096 Feb 3 23:11 sandbox cdog5000@srv3:~$ sudo g++ --static -o "/home/cdog5000/cody.out" "/home/cdog5000/cody.cpp",java,linux,g++,Java,Linux,G++,正如您所看到的,如果我通过SSH而不是Java代码来实现,它会工作吗 Java代码: public static Exec exec(String cmd){ Exec exec = new Exec(cmd); try { long current = System.currentTimeMillis(); Process proc = Runtime.getRuntime().exec(cmd);
public static Exec exec(String cmd){
Exec exec = new Exec(cmd);
try {
long current = System.currentTimeMillis();
Process proc = Runtime.getRuntime().exec(cmd);
exec.setReturnValue(proc.waitFor());
exec.setRunTime(System.currentTimeMillis() - current);
BufferedInputStream bos = new BufferedInputStream(proc.getInputStream());
byte b[] = new byte[1024];
String content = "";
while(bos.read(b) != -1) {
content += new String(b);
}
exec.setStdIn(content.split("\n"));
content = "";
bos = new BufferedInputStream(proc.getErrorStream());
while(bos.read(b) != -1) {
content += new String(b);
}
exec.setStdErr(content.split("\n"));
} catch (Exception e) {
e.printStackTrace();
}
return exec;
}
感谢您的帮助,我们非常感激 GCC不是那样说谎的-看起来文件不在那里。您确定正在向我们显示来自正确目录的输出吗
Err: g++: "/home/cdog5000/cody.cpp": No such file or directory
他正在告诉你这个问题
您有一个级别的引号太多,因此您要查找的是“/home/cdog5000/cody.cpp”
,而不是/home/cdog5000/cody.cpp
报告说:
更准确地说,命令字符串使用由call new StringTokenizer(命令)创建的StringTokenizer分解为标记,而无需进一步修改字符类别。然后,标记器生成的标记按相同顺序放置在新的字符串数组cmdarray中
这意味着它只在空白处拆分,它不像shell那样处理双引号
许多语言都有两个函数,一个叫做exec
,它逐字运行命令,另一个叫做system
,它将字符串传递给shell,在shell中拆分单词并展开通配符
我看不到Java中的
system
调用,因此我认为您必须使用exec(String[]cmdarray)
而不是exec(String命令)
cdog5000@srv3:~$ls-l“/home/cdog5000/cody.cpp”-rw-r--r--1 cdog5000 cdog5000 106 Feb 4 02:09/home/cdog5000/cody.cpp运行的是什么cdog5000@srv3:~$sudo g++--static-o“/home/cdog5000/cody.out”“/home/cdog5000/cody.cpp”outputNothing,问题已经解决。可能g++正在查找一个名为“/home/cdog5000/cody.out”的文件——即两端都有引号。也许试着删除引号…?太棒了,这就解决了。把它作为回复贴出来,我会给你一个被接受的答案。哦,天哪,我错过了一个被接受的答案。哦,好吧。顺便说一句,Java5+使用exec的方法是使用ProcessBuilder。