Используя 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 находится в рабочем каталоге родительского процесса, а код терминала выполняется из того же каталога.
@@@
- типичная последовательность из заголовка двоичного файла (ELF). Вы забыли NULL
завершить свой список аргументов execlp()
, чтобы он читал мусор и пытался передать его на g++.