0

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

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

这重复了 6 次,“文件名”中的几个字符发生了一些变化。为了比较,这是我在终端中写的:

$ 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 位于父进程的工作目录中,终端代码从同一目录执行。

4

1 回答 1

1

@@@是来自二进制 (ELF) 文件头的典型序列。您忘记将NULL参数列表终止为execlp(),因此它读取垃圾并尝试将其传递给 g++。

于 2013-10-20T06:47:01.123 回答