Де містяться збережені файли - Ubuntu Linux, GCC


80

Отже, коли ми робимо наступне:

проти

компілятор, GCC у моєму випадку, знає, де знаходиться цей stdio.h (і навіть файл об'єкта) на моєму жорсткому диску. Він просто використовує файли без моєї взаємодії.

Я думаю, що на моїй машині Ubuntu Linux файли зберігаються в /usr/include/. Звідки компілятор знає, де шукати ці файли? Це можна налаштувати чи це просто очікуваний за замовчуванням? Де б я шукав цю конфігурацію?

Оскільки я задаю питання щодо цих файлів, що містять файли, що є джерелом файлів? Я знаю, що це може бути нечітким у спільноті Linux, але хто керує цим? Хто надаватиме та керуватиме однаковими файлами для компілятора Windows.

У мене завжди було враження, що вони йдуть із компілятором, але це було припущенням ...

Відповіді:


53

Дивіться тут: Шлях пошуку

Короткий зміст:

Коли файл включення знаходиться в дужках, препроцесор спочатку здійснює пошук у шляхах, вказаних через прапор -I . Потім він здійснює пошук за стандартними шляхами включення (див. Посилання вище та використовуйте прапор -v для тестування у вашій системі).

Коли файл включення знаходиться в лапках, препроцесор спочатку здійснює пошук у поточному каталозі, потім шляхи, вказані -iquote , потім -I шляхи, потім стандартні шляхи.

-nostdinc можна використовувати для запобігання перепроцесору взагалі шукати стандартні шляхи.

Змінні середовища також можна використовувати для додавання шляхів пошуку.

При компіляції, якщо ви використовуєте прапор -v, ви можете побачити використані шляхи пошуку.


45

gcc - це багата і складна програма "оркестрування", яка вимагає виконання багатьох інших програм для виконання своїх обов'язків. З конкретною метою побачити, де #include "goo"і що #include <zap>шукатимуть у вашій системі, я рекомендую:

Це один із способів переглянути списки пошуку для включених файлів, включаючи (якщо вони є) каталоги, в які #include "..."будуть шукатись, але #include <...>не будуть. Цей конкретний список, який я показую, насправді на Mac OS X (він же Дарвін), але команди, які я рекомендую, покажуть вам списки пошуку (а також цікаві деталі конфігурації, які я замінив ...тут ;-) у будь-якій системі, на якій gcc працює належним чином.


4
Чи можете ви пояснити, звідки GCC знає пошук у / Library / Frameworks у наведеному вами прикладі? Скажімо, важко закодований пошук у / usr / include та / usr / local / include, але звідки беруться додаткові каталоги? З навколишнього середовища?
rlib

10

Карл відповів на ваше запитання про шлях пошуку, але, наскільки йдеться про "джерело файлів", слід пам’ятати одне: якщо ви встановите libfoo пакет і хочете зробити з ним певну розробку (тобто використовуйте його заголовки), вам також потрібно буде встановити libfoo-dev. Як /usr/includeви вже бачили, стандартні файли заголовків бібліотеки вже є .

Зауважте, що деякі бібліотеки з великою кількістю заголовків встановлюватимуть їх у підкаталог, наприклад /usr/include/openssl. Щоб включити один із них, просто вкажіть шлях без /usr/includeдеталі, наприклад:


4

У \#includeфайлах ПКУ зберігаються в /usr/include. Стандартні файли включення g ++ зберігаються в /usr/include/c++.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.