запустить команду с помощью execvp в программе c

Я хочу запустить эту команду с помощью execvp

gcc file1.o file2.o file3.o

Я создал вкладку, содержащую это:

char * tab = {"file1.o", "file2.o", "file3.o", NULL };

когда я вызываю execvp следующим образом:

 execvp("gcc",tab);

У меня есть эта ошибка:

file1.o: erreur fatale: -fuse-linker-plugin, but liblto_plugin.so not found

Когда я компилирую файлы, используя:

gcc file1.o file2.o file3.o

нет проблем.

Заметьте, моя программа не такая, я написал ее так для упрощения. полный код см. на странице http://pastebin.com/zQ8pwmZd.


person rabah Rachid    schedule 26.10.2013    source источник


Ответы (1)


Первый элемент массива argv, переданного в execvp (т. е. второй аргумент, переданный в execvp), должен быть (точно так же, как и в случае с массивом argv, переданным в функцию main любой программы на C) именем выполняемой программы, с элементом после этого он является первым аргументом командной строки. Таким образом, tab должно быть:

char * tab[] = {"gcc", "file1.o", "file2.o", "file3.o", NULL };
person jwodder    schedule 26.10.2013
comment
@rabahRachid: Если мой ответ решил вашу проблему, вы должны принять его, нажав на галочку под стрелками для голосования. - person jwodder; 27.10.2013
comment
char * tab = {gcc, файл1.о, файл2.о, файл3.о, 0}; не будет компилироваться. Вы имеете в виду char * tab[] = {gcc, file1.o, file2.o, file3.o, 0}; ? - person Charlie Burns; 27.10.2013
comment
да.вроде я сказал,я такого не писал. Это просто для упрощения, поэтому я не обратил внимание на эту ошибку. Кто-нибудь может сказать мне, почему вкладка должна заканчиваться NULL. Люди, которые написали эту функцию, не могли сделать иначе, не добавив NULL в конце! - person rabah Rachid; 27.10.2013