Если я ищу файлы, которые включают файл 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++
Но это тоже не помогает.
Это работает...
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
См. Комментарии для получения дополнительной информации.
Включение пути lib не поможет вам здесь. Путь lib содержит путь к двоичным файлам, с которыми вы связываетесь.
Вам нужно найти путь include, который предоставляет декларации для экспортированных символов lib, с которыми вы связываете.
Общее распределение (не установленное в камне!):
lib/ (binaries to link against)
include/ (declarations are here!)
bin/ (.so on *nix or .dll or Windows)
C_INCLUDE_PATH=/usr/local/include/libusb-1.0/
? Я уверен, что кто-то еще даст вам точный способ сделать это.
Я, возможно, избиваю мертвую лошадь здесь. Однако у меня была такая же проблема, и перечисленные решения не работали для меня. Если вы находитесь в одной лодке, это то, что в конечном итоге работает для меня:
gcc -I/usr/include/libusb-1.0 / -lusb-1.0 example.c