LINUX.ORG.RU

симлинк на программу и сама программа работают по разному


0

1

привет.

убунта-12.10, clang-3.0.

пишу хэлловорд, компилю в помощью команды 'clang++ -std=c++11 hello.cpp -ohello' - все компилится и выполняется. далее, изменяю команду так: 'clang -std=c++11 hello.cpp -ohello' и получаю кучу анрезолведов(undefined reference) на libstdc++

но дело в том, что:

-rwxr-xr-x 1 root root 12407840 Apr 25 2012 /usr/bin/clang

lrwxrwxrwx 1 root root 5 Apr 25 2012 /usr/bin/clang++ -> clang

но даже если скопировать clang под именем clang++ - ошибка остается %)

чо за нафег?

объясните пожалуйста, в чем тут дело?

благодарен.

★★★

Последнее исправление: niXman (всего исправлений: 3)

обрабатывает argv[0], видимо. busybox так же делает, к примеру.

AptGet ★★★
()
Ответ на: комментарий от niXman
[pf@spock]:[~][0]% vim test.c
[pf@spock]:[~][0]% gcc test.c
[pf@spock]:[~][0]% ./a.out 
argv[0]==./a.out
[pf@spock]:[~][17]% ln -s a.out b.out
[pf@spock]:[~][0]% ./b.out
argv[0]==./b.out
[pf@spock]:[~][17]% cat test.c 
#include <stdio.h>

void main(int argc, char** argv)
{
	printf("argv[0]==%s\n", argv[0]);
}
post-factum ★★★★★
()
Ответ на: комментарий от niXman

Да, чуть сложнее :-)) Но нужно не только учится писать код, но и уметь разбиратся в чужом коде.

В файле clang/tools/driver/driver.cpp вызывается функция ParseProgName(), которая по argv[0] определяет C или C++. Но я не увидел там, чтобы была какая-то проверка, является ли argv[0] обычным файлом или сиволической ссылкой. Более того, под оффтопиком, насколько я знаю, «clang» и «clang++» это два разных, но идентичных по содержимому файла, поэтому проверьте ещё раз, что у вас всё правильно с именем файла «clang++».

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.