使用execlp运行时,g ++会出现错误,但是终端没有?

时间:2013-10-20 06:36:04

标签: c++ linux gcc g++ exec

使用fork()和execlp(),我正在尝试将cpp文件编译为.so。我正在运行一个复制的g ++ - 4.8可执行文件,它位于我项目的目录树中。当从终端运行时,一切顺利,我最终得到了一个有效的动态库,但是当我创建一个子进程并使用execlp做同样的事情时,我收到一个错误:

g++-4.8: error: @@@: No such file or directory

重复6次,“filename”中的几个字符改变了一下。为了比较,这是我在终端写的:

$ g++/bin/g++-4.8 -fPIC -shared bob.cpp -o bob.so

...这是产生错误的代码:

if (fork() == 0) {
    execlp("g++/bin/g++-4.8", "g++/bin/g++-4.8", "-fPIC", "-shared", "bob.cpp", "-o", "-bob.so");
}

bob.cpp位于父进程的工作目录中,终端代码从同一目录执行。

1 个答案:

答案 0 :(得分:1)

@@@是二进制(ELF)文件头的典型序列。你忘了NULL将你的参数列表终止到execlp(),所以它读取了垃圾并试图将它传递给g ++。