Если вам нужно использовать опцию `-llibary` в clang

Если вам нужно использовать опцию `-llibary` в clang

Хотите узнать, нужно ли вам использовать-ллибопция в 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 обычно используется для пользовательских библиотек.

Связанный контент