C ++ включают библиотеки - PullRequest
       4

C ++ включают библиотеки

2 голосов
/ 18 марта 2012

Хорошо, прошло много времени, и у меня проблемы с # включает в себя

Итак, я делаю

#include "someheader.h"

, но это дает мне

fatal error: someheader.h: No such file or directory

Это общесистемная библиотека, я думаю, вы могли бы сказать.Я использую Arch Linux, и я установил библиотеку из репозитория, и я думаю, что файлы .h находятся в /usr/include.

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

Каков «правильный» способ сделать это?

Редактировать: я был не прав, говоря, что файлы .h были в / usr / include,Я имел в виду, что там находится папка с библиотекой. Итак, ответ Эмиля Кормье в определенной степени сработал.Проблема в том, что в заголовочном файле есть некоторые включения, и из методов, к которым я пытаюсь получить доступ, похоже, что эти включения не происходят, это выдает ошибку

undefined reference to Namespace::Class::method()

Edit: Ok, так чтоокончательный ответ:

#include <library_name/someheader.h>

И скомпилируйте с

g++ code.cpp -llibrary_name

Ответы [ 3 ]

7 голосов
/ 18 марта 2012

Вы бы использовали #include <someheader.h> для заголовочных файлов в системных расположениях.

#include "someheader.h" попытается включить файл someheader.h в каталог вашего .c файла.

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

g++ -Wall youprogram.cpp -lname_of_library

Это не является причиной ошибок компоновщика "undefined reference ..".

4 голосов
/ 18 марта 2012

Иногда файлы заголовков для библиотеки устанавливаются в /usr/include/library_name, поэтому вы должны включить вот так:

#include <library_name/someheader.h>

Используйте свой файловый менеджер (или консольные команды), чтобы найти файл заголовка на вашемсистема и посмотрите, следует ли префикс имени файла заголовка с именем каталога.


Ошибка undefined reference, которую вы получаете, является ошибкой компоновщика.Вы получаете эту ошибку, потому что вы не связываете в libsynaptics вместе с вашей программой, поэтому компоновщик не может найти «реализацию» используемых вами функций libsynaptics.

Если вы компилируете изВ командной строке с GCC вы должны добавить опцию -lsynaptics для ссылки в библиотеке libsynaptics.Если вы используете IDE, вы должны найти место, где вы можете указать библиотеки для ссылки и добавить синаптики.Если вы используете make-файл, вам нужно изменить список флагов компоновщика так, чтобы он добавлял -lsynaptics.

См. Это учебное пособие по ссылкам на библиотеки с GCC.

1 голос
/ 18 марта 2012

Быстрое решение заключается в использовании:

#include <someheader.h>

при условии, что someheader.h находится в стандартных местоположениях включения (чтобы найти его, используйте команду locate someheader.h в оболочке. Если оно находится в /usr/include, оно находится в стандартном расположении. Если оно находится в подкаталоге /usr/include вам нужно добавить только часть каталога до /usr/include в директиве #include (например, #include <fancy_lib/someheader.h>)

Однако это только половина истории. Вам также необходимо настроить систему сборки так, чтобы она находила указанную библиотеку и добавляла ее путь включения (путь, по которому хранятся ее заголовочные файлы) в команду компилятора (для gcc, то есть -I/path/to/header). Таким образом, вы также можете создавать разные версии, настраивая их в своей системе сборки. Если библиотека не только для заголовков, вам также придется добавить ее в зависимости компоновщика. Как этого добиться в вашей системе сборки, лучше всего узнать из документации.

...