Если я не пропустил что-то здесь, вы не связываете никаких библиотек в вашей команде сборки.
Допустим, вы хотите связать разделяемую библиотеку libusb.so, , которая находится в подпапке libusb. вашей текущей папки, где находится основной. cpp. Я не буду здесь вдаваться в подробности о soname, имени ссылки lib et c, просто чтобы прояснить вопрос о rpath.
rpath предоставит путь компоновщика во время выполнения к библиотеке, а не для linktime, даже если потребуется общая библиотека присутствовать (быть доступным) во время компиляции / ссылки. Таким образом, чтобы обеспечить загрузчику приложения возможность поиска необходимой библиотеки во время запуска относительно папки вашего приложения, существует переменная $ ORIGIN, вы можете увидеть ее с помощью readelf, но только если вы связываете некоторую библиотеку с $ ORIGIN в rpath. Вот пример, основанный на вашем вопросе:
g++ main.cpp -o main -L./libusb -Wl,-rpath,'$ORIGIN/libusb' -lusb
Как видите, вам нужно предоставить каталог -L для поиска по времени компиляции / компоновки и rpath для компоновщика во время выполнения. Теперь вы сможете проверить все необходимые библиотеки для вашего приложения, используя readelf и местоположение для поиска.