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

Хотите знать, если вы должны использовать опцию -llib в 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 ответ

Решение

На странице руководства Apple ld, который -llib опция передается:

-lx Эта опция говорит компоновщику искать libx.dylib или libx.a в пути поиска библиотеки. Если строка x имеет форму yo, то этот файл ищется в тех же местах, но без добавления "lib" или добавления ".a" или ".dylib" к имени файла.

Из этого не похоже, что есть какой-то способ не использовать -l потому что все, что делает флаг - это говорит компоновщику найти библиотеку, а затем связать ее с исполняемым файлом. Он не включается автоматически, поскольку он не является частью библиотеки libSystem, на которую вы ссылались, которая, по-видимому, является единственной автоматически связанной библиотекой в ​​macOS. Библиотеки в /usr/local/lib/ (по крайней мере, в MacOS) не являются системными библиотеками в том смысле, что они будут автоматически связаны, поскольку / usr / local / lib обычно используется для установленных пользователем библиотек.

Другие вопросы по тегам