Pular para o conteúdo

Achar a biblioteca

O nome do arquivo em cada sistema, onde ele é procurado, e o que fazer quando não acha.

A mesma biblioteca tem três nomes: libz.so.1 no Linux, libz.dylib no macOS, zlib1.dll no Windows. C.carregar("z") procura pelo nome curto no lugar em que o sistema procura, e aceita também o caminho completo.

dataforge
adopt Arcane.C as C

libc := C.padrao()                  // libc, ou msvcrt no Windows
assert libc.tem("strlen")
assert not libc.tem("funcao_que_nao_existe")

falhou := no
monitor:
    C.carregar("biblioteca_que_nao_existe_aqui")
handle RuntimeError as e:
    falhou := yes
    out e.message
assert falhou
SistemaArquivoOnde procuraSe não achar
LinuxlibNOME.so/usr/lib, /lib, LD_LIBRARY_PATHinstale o pacote -dev
macOSlibNOME.dylib/usr/lib, Homebrew, DYLD_LIBRARY_PATHbrew install NOME, ou o caminho completo
WindowsNOME.dlla pasta do programa, PATHponha a pasta da DLL no PATH

C.do_processo() abre os símbolos do próprio processo — o dlopen(NULL) —, e C.matematica() resolve a libm, que no macOS mora dentro da libSystem.