Querendo saber se você tem que usar o-llibopção no clang. Por exemplo:
clang -lasdf foo.c -o foo.o
vinculará a biblioteca /usr/local/lib/libasdf.dylib
a foo.c
, mas estou me perguntando se existe alguma maneira de não precisar incluí-la, para que funcione como outras bibliotecas do sistema, onde você pode simplesmente fazer #include <math.h>
e não precisar vincular nada.
Ou talvez seja disso que eles estão falandoaqui:
A biblioteca libSystem também inclui funções que você normalmente esperaria encontrar em libc e libm, serviços RPC e um resolvedor de nomes. Como libSystem é vinculado automaticamente ao seu aplicativo, você não precisa adicioná-lo explicitamente à linha de link do compilador. Para sua conveniência, muitas dessas bibliotecas existem como links simbólicos para libSystem, portanto, embora a vinculação explícita a -lm (por exemplo) não seja necessária, isso não causará um erro
Responder1
Na página de manual do ld da Apple, -llib
para a qual a opção é passada:
-lx Esta opção informa ao vinculador para procurar libx.dylib ou libx.a no caminho de pesquisa da biblioteca. Se a string x estiver no formato yo, então esse arquivo será pesquisado nos mesmos locais, mas sem acrescentar 'lib' ou anexar '.a' ou '.dylib' ao nome do arquivo.
A partir disso, não parece haver como não usar, -l
porque tudo o que o sinalizador faz é dizer ao vinculador para procurar uma biblioteca e vinculá-la ao executável. Ela não é incluída automaticamente porque não faz parte da biblioteca libSystem que você referenciou, que parece ser a única biblioteca vinculada automaticamente no macOS. Bibliotecas em /usr/local/lib/ (pelo menos no MacOS) não são bibliotecas de sistema, no sentido de que seriam vinculadas automaticamente, porque /usr/local/lib é geralmente usado para bibliotecas instaladas pelo usuário.