Se você tiver que usar a opção `-llibary` no clang

Se você tiver que usar a opção `-llibary` no clang

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.dyliba 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, -llibpara 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, -lporque 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.

informação relacionada