Как вы добавляете библиотеки в Eclipse CDT? (Данный файл или каталог отсутствует)

У меня проблемы с добавлением библиотек заголовков.

Я щелкаю правой кнопкой мыши по своему проекту и выбираю Свойства-> C / C++ General-> Paths and Symbols.

На вкладке Включения: Языки-> GNU C++

Я нажимаю на Добавить... -> Файловая система, затем добавляю папку с именем boost_1_52_0 или любую другую папку.

Когда я использую intellisense Eclipse, он находит то, что я желаю, однако это не помогает при построении.

fatal error: boost/random/...: No such file or directory

Не уверен, почему это происходит.

Любая помощь, только оторванная от земли, будет оценена.

22:34:02 **** Incremental Build of configuration Default for project TestProj****
make all 
g++ -O2 -g -Wall -fmessage-length=0    -c -o TestProj.o TestProj.cpp
TestProj.cpp:5:52: fatal error: boost/random/random_number_generator.hpp: No such file     or directory
<builtin>: recipe for target `TestProj.o' failed
compilation terminated.
make: *** [TestProj.o] Error 1

Очевидно, это не так просто, как добавить папку в каталог к ​​интерфейсам, которые предоставляет eclipse. Я в восторге.

С уважением, датчанин

5 ответов

Решение

Я щелкаю правой кнопкой мыши по своему проекту и выбираю Свойства-> C/C++ General-> Paths and Symbols.

На вкладке Включения: Языки-> GNU C++

Я нажимаю на Добавить... -> Файловая система, затем добавляю папку с именем boost_1_52_0 или любую другую папку.

Когда я использую intellisense Eclipse, он находит то, что я желаю, однако это не помогает при построении.

Да, это то, что вам может понадобиться, чтобы Eclipse CDT intellisense и индексатор были синхронизированы с вашими внешними ссылками.

fatal error: boost/random/...: No such file or directory

Не уверен, почему это происходит.

Это потому, что ваши настройки для сборки проекта могут выбрать, что вы собираетесь сами управлять процессом сборки:Свойства сборки CDT C / C

Если это так, вы должны сообщить свой вручную управляемый makefile знать о среде и настройках флагов компилятора / компоновщика.

В таких случаях для связи с управляемым вручную make-файлом со свойствами сборки Eclipse CDT можно использовать, например, настройки переменных сборки или среды из упомянутого раздела свойств проекта:

Что добавить, зависит от того, что вы пытаетесь включить. В случае Boost существует несколько библиотек только для заголовков, и есть некоторые библиотеки, которые требуют связывания в библиотеках статических / разделяемых объектов (например, сериализация).

Библиотеки только для заголовков

Для библиотек, содержащих только заголовки, вам просто нужно включить базовый каталог всех файлов заголовков. С gcc, вы добавляете каталог, используя -I флаг (например, -I C:/path/to/boost_52_0). С управляемым проектом make-файла в Eclipse вы можете сделать то же самое, используя Properties > C/C++ Build > Settings > Tool Settings > GCC C++ Compiler > Directories

Библиотеки статических / общих объектов

Для статических библиотек / библиотек с общими объектами вы должны указать две опции:

  1. -l -> Имя библиотеки, без префикса 'lib' и суффикса файла (например, libboost_serialization.dll -> boost_serialization
  2. -L -> Каталог для поиска файла библиотеки. Это необходимо, только если библиотека находится по нестандартному пути.

Как отметил @Chris, для управляемого проекта makefile обе эти опции могут быть установлены через Properties > C/C++ Build > Settings > Tool Settings > GCC C++ Linker > Libraries

Является Properties > C/C++ Build > Settings > Tool settings > ... Linker > Libraries что ты ищешь? Здесь вы добавляете опции -l при компиляции из командной строки.

У меня такая же проблема. Изменение настроек в C/C++ Build -> Settings решил проблему. Убедитесь, что расширение имени файла.lib исключено! Смотрите скриншот ниже: введите описание изображения здесь

Решается добавлением -I в make-файл.

BOOST =     C:/Users/neo/Documents/boost_1_52

CXXFLAGS =  -O2 -g -Wall -fmessage-length=0 -I$(BOOST)

OBJS =      p1.o

LIBS =      

TARGET =    p1.exe


$(TARGET):  $(OBJS)
    $(CXX) -o $(TARGET) $(OBJS) $(LIBS)

all:    $(TARGET)

clean:
    rm -f $(OBJS) $(TARGET)
Другие вопросы по тегам