Расположение include стандартной библиотики C++

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Electronix
Сообщения: 53
ОС: Slackware, Suse, XP

Расположение include стандартной библиотики C++

Сообщение Electronix »

Насколько я понял, чтобы получить каталог с STL нужно прибавить к пути /usr/include/c++ версию, которую скажет g++ -v, именно в этом каталоге распологаются хедеры STL.

Остальные хедеры распологаются в /usr/include (типа unistd.h, stdio.h) - я все правильно понимаю ?

Меня волнует каким образом в разных дистрибутивах мне получить эти каталоги с файлами, ведь gcc/g++ их используют по умолчанию, значит у них есть какой-то алгоритм определения то в каких каталогах нужно искать.
We have no beginning, we have no end. We are infinite.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5288
ОС: Gentoo

Re: Расположение include стандартной библиотики C++

Сообщение /dev/random »

Нет у них никаких алгоритмов. Путь к хедерам STL записывается в исполнимый файл gcc на этапе компиляции самого gcc.
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: Расположение include стандартной библиотики C++

Сообщение d_n_k »

Меня волнует каким образом в разных дистрибутивах мне получить эти каталоги с файлами

зачем? компилятор найдет сам.
абсолютные пути не рулят
все сказанное есть имхо...
Спасибо сказали:
gmorgunov
Сообщения: 27
ОС: linux mandriva2007

Re: Расположение include стандартной библиотики C++

Сообщение gmorgunov »

Есть опция компилятора gcc/g++ -I, при указании которой хедеры< >, будут искаться еще и в диркт. -I<абс.путь>.
Проще на примере:

gcc -I/root/include -I/home/ivan -I/usr/lib/lib/include hello.c -o hello

эти директории будут добавлены к станд. пути поиска /usr/include, причем даже не проверяется есть они(директ.) или нет.

Попробуйте от рута:
#cp /usr/include/stdio.h /home/ivan/stdio.h
#rm /usr/include/stdio.h и
gcc -I/home/ivan/stdio.h hello.c -o hello
У вас все пройдет. А если удалить опцию -I то нет.

P.S. -I (загл. И) не путать с l (эль прописная-опция библиотек)
Спасибо сказали:
gmorgunov
Сообщения: 27
ОС: linux mandriva2007

Re: Расположение include стандартной библиотики C++

Сообщение gmorgunov »

В пред. посту ошибся, надо:
gcc -I/home/ivan hello.c -o hello ;)
Спасибо сказали:
Аватара пользователя
destr
Сообщения: 128
ОС: Debian

Re: Расположение include стандартной библиотики C++

Сообщение destr »

Electronix писал(а):
08.07.2008 10:44
Меня волнует каким образом в разных дистрибутивах мне получить эти каталоги с файлами, ведь gcc/g++ их используют по умолчанию, значит у них есть какой-то алгоритм определения то в каких каталогах нужно искать.

destr@des:/tmp/test$ g++ -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.2.4 (Debian 4.2.4-2+b1)

Видите пути которые вас интересуют?
Спасибо сказали:
Аватара пользователя
Electronix
Сообщения: 53
ОС: Slackware, Suse, XP

Re: Расположение include стандартной библиотики C++

Сообщение Electronix »

destr
Странно ... а у меня в старых версиях это не показывается, например на компиляторе 3.x, только номер версии ...


d_n_k
зачем? компилятор найдет сам.
абсолютные пути не рулят

В том то и дело - что они мне нужны, чтобы получить список файлов и распарсить их, для того чтобы сделать auto complete. Не буду же я пользователю говорить укажи мне стандартные каталоги в твоей системе, их же можно определить как-то и иначе.

Еще раз - у меня проблем с компиляцией нет :) Мне нужно получить эти каталоги для других целей.
We have no beginning, we have no end. We are infinite.
Спасибо сказали:
Аватара пользователя
destr
Сообщения: 128
ОС: Debian

Re: Расположение include стандартной библиотики C++

Сообщение destr »

Electronix писал(а):
08.07.2008 21:32
Мне нужно получить эти каталоги для других целей.

Ну сами тогда поищите:)
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458
Контактная информация:

Re: Расположение include стандартной библиотики C++

Сообщение powerfox »

gmorgunov писал(а):
08.07.2008 20:07
Попробуйте от рута:
#cp /usr/include/stdio.h /home/ivan/stdio.h
#rm /usr/include/stdio.h и
gcc -I/home/ivan/stdio.h hello.c -o hello
У вас все пройдет. А если удалить опцию -I то нет.

Зачем же так извращаться?

Вообще, обычно делают дефолтный путь и дают возможность пользователю изменить.
/usr/include/c++/`gcc -dumpversion`/ для начала вполне сойдёт.
Спасибо сказали:
Аватара пользователя
Electronix
Сообщения: 53
ОС: Slackware, Suse, XP

Re: Расположение include стандартной библиотики C++

Сообщение Electronix »

хм ... да ... я кажется теперь понял почему IDE в линукс не могут сами по умолчанию сразу же распарсить стандартную библиотеку - всегда им указывать приходится.

Спасибо всем, я понял куда копать нужно.
We have no beginning, we have no end. We are infinite.
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: Расположение include стандартной библиотики C++

Сообщение d_n_k »

$ gcc-config
Usage: gcc-config [options] [CC Profile]
Change the current cc/gcc profile, or give info about profiles.

Options:
-O, --use-old Use the old profile if one was selected.
-f, --force Make sure all config files are regenerated.
-P, --use-portage-chost Only set to given profile if its CHOST is the
same as that set for portage in /etc/make.conf
(or one of other portage config files...).
-c, --get-current-profile Print current used gcc profile.
-l, --list-profiles Print a list of available profiles.
-S, --split-profile Split profiles into their components
-E, --print-environ Print environment that can be used to setup the
current gcc profile, or a specified one.
-B, --get-bin-path Print path where binaries of the given/current
profile are located.
-L, --get-lib-path Print path where libraries of the given/current
profile are located.
-X, --get-stdcxx-incdir Print path where g++ include files of the
given/current profile are located.


$ gcc-config -X
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4

у меня нет никакого /usr/include/c++
все сказанное есть имхо...
Спасибо сказали:
Аватара пользователя
Electronix
Сообщения: 53
ОС: Slackware, Suse, XP

Re: Расположение include стандартной библиотики C++

Сообщение Electronix »

Да это как раз то что нужно ... но у меня например ни в слаке, ни в сюзи нету gcc-config -> не факт что он у юзера будет :(
Еще огорчает то что /usr/include/c++ тоже оказывается не стандартный каталог :(

Hо меня все таки поражает, почему g++ знает стандартные пути - но просто так их показывать не хочет ...
We have no beginning, we have no end. We are infinite.
Спасибо сказали:
gmorgunov
Сообщения: 27
ОС: linux mandriva2007

Re: Расположение include стандартной библиотики C++

Сообщение gmorgunov »

Для конкретного файла еще можно посмотреть:
g++ -M hello.cc
Даст все хедеры.
Спасибо сказали:
Аватара пользователя
Electronix
Сообщения: 53
ОС: Slackware, Suse, XP

Re: Расположение include стандартной библиотики C++

Сообщение Electronix »

Да похоже единственный путь узнать, это создать тестовое приложение, наподобие такого :

Код: Выделить всё

#include <iostream>
#include <unistd.h>
int main()
{
      return 0;
}


Вызвать g++ -M для исходника, найти строки с iostream и unistd.h и вырезать из них пути.
We have no beginning, we have no end. We are infinite.
Спасибо сказали:
Ответить