Чтобы иметь возможность связывать вашу библиотеку с помощью -lmyownsomething
, вам необходимо иметь libmyownsomething.so
(или .a
для статического связывания) в одном из каталогов, которые компоновщик ищет по умолчанию.
Я нашел это в документации texinfo для GNU ld ( путь поиска библиотеки в скрипте компоновщика ):
'SEARCH_DIR (PATH)'
The 'SEARCH_DIR' command adds PATH to the list of paths where 'ld'
looks for archive libraries. Using 'SEARCH_DIR(PATH)' is exactly
like using '-L PATH' on the command line
Теперь в GNU ld (точнее, ld.bfd
) используется скрипт компоновщика по умолчанию , который можно получить с помощью --verbose
.Давайте посмотрим, какие каталоги поиска существуют по умолчанию (в любом случае, в моей системе - это вполне может зависеть от конфигурации; если вы собираетесь распространять свою библиотеку, вы, вероятно, захотите сделать наиболее переносимый выбор):
$ ld --verbose |& grep SEARCH_DIR
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib");
Чтобы ответить на вопрос о #include
файлах, вам нужно обратиться к документации компилятора или, возможно, к стандарту POSIX.(Тем не менее, я бы рекомендовал либо выбрать самый простой вариант - см. Ниже), либо предоставить настраиваемый способ установки ваших файлов, например, с опцией --prefix
время сборки. Тогда пользователь / упаковщик может выбрать лучшее место для их размещения.для себя. Но ничто не мешает вам предоставлять разумные значения по умолчанию. То же самое относится и к библиотекам, но я попытался ответить на эту часть вопроса в точности так, как это было задано.)
Как правило, этот материал варьируется от системы к системе,но они обычно следуют Стандарту Иерархии Файловой системы .Я думаю, /usr/include
и /usr/lib
- самый безопасный выбор.Еще одна хорошая практика - использовать, например, механизм pkgconf
.
Надеюсь, это поможет.Я действительно должен был сначала спросить о вашем сценарии использования: кому и как вы собираетесь распространять свое программное обеспечение?В любом случае, обязательно оставляйте комментарии.Кроме того, мне интересно, является ли это материалом Stackoverflow;возможно, ему нужно переехать в другое место.