2017-01-01 6 views
1

Я использую библиотеку, написанную другими, которая на основе C используется для использования на C++. Я думаю. Все включения, используемые внутри заголовков или исходных файлов, находятся в форме <> вместо «", хотя они не являются стандартными библиотечными файлами. Мой компилятор не распознает их и возвращает «файл не найден» ошибкаКак использовать <> вместо "" включить

Пример проблемы внутри следующего заголовка:

#ifndef _ga_ga_h_ 
#define _ga_ga_h_ 

// Make sure that we get the configuration into each of the galib components 
// that will be used. 
#include <ga/gaconfig.h> 

// These are the headers for all of the genetic algorithm classes. 
#include <ga/GASimpleGA.h> 
#include <ga/GASStateGA.h> 
#include <ga/GAIncGA.h> 
#include <ga/GADemeGA.h> 
#include <ga/GADCrowdingGA.h> 

// Here we include the headers for all of the various genome types. 
#include <ga/GA1DBinStrGenome.h> 
#include <ga/GA2DBinStrGenome.h> 
#include <ga/GA3DBinStrGenome.h> 
#include <ga/GABin2DecGenome.h> 

я включаю этот заголовок внутри моей программы с помощью #include «га. h ", но очень сложно изменить внутри каждого файла заголовка/источника в библиотеке.

Есть ли способ сделать компилятор <> как если бы они были ""? Я попытался добавить пути к «Добавлять каталоги include» из свойств проекта (я использую Visual Studio), многие ошибки включений исчезли, но около 30 сохранялись. Странно то, что они находятся в файле под названием «c1xx», но у меня нет этого файла!

спасибо,

+0

Вы можете попробовать добавить путь к тем заголовкам в пути поиска заголовка компилятора. Если это будет работать или нет, будет реализована реализация. – Unimportant

+0

Как установить или добавить к пути поиска по умолчанию для включенных файлов зависит от компилятора и среды. С помощью GCC и Clang из командной строки вы используете опцию '-I' (верхний регистр i). –

+0

Какой компилятор вы используете? – pstrjds

ответ

4

Определение несколько что <> используется для «системы» файлы заголовков, обычно находятся в местах, например,/USR/включать (на Unix-подобных системах) и «» используется для локального заголовка файлы. Когда вы компилируете свой код, вы можете указать расположение дополнительных каталогов, содержащих заголовочные файлы, например. используя параметр -I при использовании GCC. Проверьте документацию вашего компилятора на необходимые настройки

Так, например, в Linux и GCC, если ваш каталог «ga» находится в/usr/local/include/ga, вы будете использовать cc -I/usr/local/include.

+0

и это не имеет ничего общего с c или C++ код. Хотя при связывании может возникнуть проблема с изменением имени. – danishansari

+0

Благодарим вас за ответ. Извините, я noob, не могли бы вы прояснить немного больше? поэтому в моем источнике я включаю файл следующим образом: – Peet

+0

#include "ga \ ga.h", и внутри этого файла есть все эти включения с помощью <> ... поэтому я должен включить его так: #include "- л \ га \ ga.h "? – Peet

-2

Если вы в командной строке:

echo | gcc -v -E -x c++ - 

вы получите выход с по умолчанию включают в себя каталоги для C++. Это встроенные в систему пути поиска.

Если вы скомпилируете g++ -I/some/dir -o foo foo.cpp, вы добавите дополнительный путь поиска (/some/dir) к компиляции.

Заголовки в вышеуказанных местах можно найти в директивах include, таких как #include <header>. Директивы #include "header" также могут найти заголовки в этих местах, но они более актуальны для следующего случая.

Когда вы #include "header", ваш компилятор сначала попытается найти «заголовок» по отношению к каталогу foo.cpp если он включает это, несмотря на foo.cpp каталог, находясь в пути поиска или нет. Если он не находит его там, он попытается найти в пути поиска include. Таким образом, это более актуально для заголовков, которые больше привязаны к определенному файлу .cpp, и вы не хотите, чтобы дополнительные дополнительные пути поиска добавлены в компиляцию, или если вы предпочитаете использовать директивы include с относительными путями.

Так что, если вы используете #include <header>, header должны быть в некоторых из включаемого поиска путей, системы или /some/dir от -I флага. Если header относится к foo.cpp, но не в путях поиска, компиляция завершится неудачно.

Если вы используете #include "header", а header не относится ни к одному из указанных путей поиска, его все еще можно найти относительно foo.cpp.

+2

Вопрос о Visual Studio, а не gcc. И gcc не обрабатывает C++ правильно; для этого вы должны использовать g ++. –

+0

@PeteBecker yo C++ expert. Я использовал gcc на 'gcc -v -E -x C++ -', что правильно, чтобы получить список заголовков для C++ и использовать g ++ в другом месте. –

+1

@PeteBecker И вопрос не помечен как визуальная студия, он ее использует. То, что я описал, также относится к clang (который, кстати, работает таким же образом, чтобы получить список заголовков, вы используете clang, а не clang ++). И идея такая же, если он применяет ее на msvc. –