Как включить динамическую библиотеку в C ++

0

Если я ищу файлы, которые включают файл libusb.h,

$grep -r "libusb.h" /usr/local/lib/

Я получил:

Бинарный файл /usr/local/lib//libusb-1.0.0.dylib матчей
Бинарный файл /usr/local/lib//libusb-1.0.a соответствует
Бинарный файл /usr/local/lib//libusb-1.0.dylib матчей

Но когда я компилирую свой класс, я получаю:

test.cpp:2:10: fatal error: 'libusb.h' file not found
#include <libusb.h>

Теперь я знаю, что это потому, что папка /usr/local/lib неправильно включена. Я пробовал такие вещи, как следующее и т.д., Но, похоже, ничего не исправляет.

gcc -lusb test.cpp
C_INCLUDE_PATH=/usr/local/lib
export C_INCLUDE_PATH

Обновить

Благодаря некоторой помощи, я придумал эту команду...

gcc test.cpp -I/usr/local/include -L/usr/local/lib -lusb-1.0

Но теперь я получаю...

ld: symbol(s) not found for architecture x86_64

Я попробовал добавить

-stdlib = libstdc++

Но это тоже не помогает.

  • 1
    Вы просто копируете двоичные данные для libusb.h. Вам нужно изменить пути включения, чтобы подобрать фактический заголовочный файл.
  • 0
    grep ищет содержимое файлов, а не имена файлов . Вы уверены, что не намеревались искать файлы с именем libusb.h в папке / usr / local / lib ?
Теги:
libusb

3 ответа

0
Лучший ответ

Это работает...

gcc -std=c++0x -stdlib=libc++ -I/usr/local/include -L/usr/local/lib -lusb-1.0 -lstdc++ test.cpp

Вы также можете переключиться на Clang. Это работает:

clang++ -std=c++0x -stdlib=libc++ -I/usr/local/include -L/usr/local/lib -lusb-1.0 test.cpp

См. Комментарии для получения дополнительной информации.

  • 1
    Если вы действительно разместите полное сообщение об ошибке, мы расскажем вам, что не так в случае с GCC.
  • 0
    Буду немного занят праздником, постараюсь добавить это к ответу.
Показать ещё 8 комментариев
2

Включение пути lib не поможет вам здесь. Путь lib содержит путь к двоичным файлам, с которыми вы связываетесь.

Вам нужно найти путь include, который предоставляет декларации для экспортированных символов lib, с которыми вы связываете.

Общее распределение (не установленное в камне!):

lib/       (binaries to link against)
include/   (declarations are here!)
bin/       (.so on *nix or .dll or Windows)
  • 0
    Отлично, поэтому я вижу, что вы имеете в виду в папке /usr/local/include/libusb-1.0/ Я вижу файл заголовка. Не могли бы вы добавить команду gcc, хотя (при условии, что двоичные файлы описаны выше). Я попытался использовать gcc -l / usr / local / include / libusb-1.0 test.cpp, и это не сработало. Извините, довольно новый для всего этого.
  • 0
    Увы, linux не моя сильная сторона, но разве это не что-то вроде C_INCLUDE_PATH=/usr/local/include/libusb-1.0/ ? Я уверен, что кто-то еще даст вам точный способ сделать это.
Показать ещё 1 комментарий
1

Я, возможно, избиваю мертвую лошадь здесь. Однако у меня была такая же проблема, и перечисленные решения не работали для меня. Если вы находитесь в одной лодке, это то, что в конечном итоге работает для меня:

gcc -I/usr/include/libusb-1.0 / -lusb-1.0 example.c

Ещё вопросы

Сообщество Overcoder
Наверх
Меню