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 に答える