
Хотите узнать, нужно ли вам использовать-ллибопция в clang. Например:
clang -lasdf foo.c -o foo.o
будет подключать библиотеку /usr/local/lib/libasdf.dylib
к foo.c
, но интересно, есть ли способ не включать ее, чтобы она работала как другие системные библиотеки, где можно просто сделать #include <math.h>
и не нужно ничего подключать.
Или, возможно, именно об этом они говорят.здесь:
Библиотека libSystem также включает функции, которые вы обычно ожидаете найти в libc и libm, службы RPC и распознаватель имен. Поскольку libSystem автоматически связывается с вашим приложением, вам не нужно явно добавлять ее в строку ссылки компилятора. Для вашего удобства многие из этих библиотек существуют как символические ссылки на libSystem, поэтому, хотя явное связывание с -lm (например) не требуется, это не вызовет ошибку
решение1
Из страницы руководства ld от Apple, куда -llib
передается эта опция:
-lx Эта опция указывает компоновщику искать libx.dylib или libx.a в пути поиска библиотек. Если строка x имеет форму yo, то этот файл ищется в тех же местах, но без добавления 'lib' в начало или '.a' или '.dylib' к имени файла.
Из этого следует, что нет способа не использовать, -l
поскольку все, что делает флаг, это говорит компоновщику искать библиотеку и затем связывать ее с исполняемым файлом. Он не включается автоматически, поскольку он не является частью библиотеки libSystem, на которую вы ссылались, которая, по-видимому, является единственной автоматически связываемой библиотекой в macOS. Библиотеки в /usr/local/lib/ (по крайней мере, в MacOS) не являются системными библиотеками в том смысле, что они будут автоматически связываться, поскольку /usr/local/lib обычно используется для пользовательских библиотек.