g++, Xerces 3.1, memcpy не был объявлен в этой области

В моем make-файле этого проекта я указываю 3 места для компилятора, чтобы найти #includes.

INCLUDES=-I. -I/home/kelly/xerces/xerces-c-3.1.1/src -I/home/kelly/Utilities_New

Когда я компилирую следующий пример кода с командной строкой, найденной в комментарии:

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <xercesc/util/XMLString.hpp>

using namespace std;

/*
g++ -I. -I/home/kelly/xerces/xerces-c-3.1.1/src -I/home/kelly/Utilities_New test.cpp
*/

int main(int argc, char* argv[])
{
    cout << "this works" << endl;
}

In file included from /home/kelly/Utilities_New/string.h:5:0,
             from /home/kelly/xerces/xerces-c-3.1.1/src/xercesc/framework/XMLBuffer.hpp:28,
             from /home/kelly/xerces/xerces-c-3.1.1/src/xercesc/util/XMLString.hpp:26,
             from test.cpp:7:
/home/kelly/Utilities_New/defs.h:26:21: fatal error: windows.h: No such file or directory
compilation terminated.

Ясно, что компилятор решил, что когда он обрабатывает Xerces #includes и находит string.h в каталоге Utilities_New, он нашел то, что ему нужно, и останавливается на этом.

Этот другой string.h был написан другим программистом, и я пытаюсь использовать его библиотеку.

Я думал, что сначала искали стандартные локации. Я немного потерялся здесь. Я могу упустить что-то супер очевидное для всех вас.

Кроме того, не существовало ли какое-то правило относительно файлов #include, которые имели ‹> против "" вокруг них и где должен был искать компилятор?


person Kelly Beard    schedule 20.04.2015    source источник
comment
Возможно, вы боретесь с флагом компоновщика, который говорит использовать или не использовать стандартные библиотеки по умолчанию. Взгляните на это быстро.   -  person Michael Dorgan    schedule 20.04.2015
comment
‹› путь поиска - сначала локальный путь   -  person    schedule 20.04.2015


Ответы (1)


  1. Стандартные локации ищутся в последнюю очередь.
  2. #include "blah" идентичен #include <blah>, если только blah не находится в том же каталоге, что и файл, который пытается его включить. (И если вы не используете редкую и специфичную для gcc опцию -iquote).

Дополнительную информацию см. здесь.

person Community    schedule 20.04.2015