Como quero que meus binários sejam executados em distribuições mais antigas , decidi construir um binário vinculado estaticamente.
Minha aplicação depende do libhid-hidraw e através disso, do libudev .
Eu tenho os pacotes de desenvolvimento instalados:
sudo apt install libudev-dev libhidapi-dev
Quando tento vincular, recebo este erro:
cc -g -Wall -Wextra -static daemon/turboledzd.c -o daemon/turboledzd -lhidapi-hidraw -ludev
/usr/bin/ld: cannot find -ludev
collect2: error: ld returned 1 exit status
No meu sistema, há um libhidapi-hidraw.a
arquivo presente:
$ dpkg -S hidraw.a
libhidapi-dev:amd64: /usr/lib/x86_64-linux-gnu/libhidapi-hidraw.a
Mas nenhuma biblioteca estática para udev:
$ dpkg -S libudev.
libudev1:i386: /usr/lib/i386-linux-gnu/libudev.so.1
libudev-dev:amd64: /usr/lib/x86_64-linux-gnu/pkgconfig/libudev.pc
python3-pyudev: /usr/lib/python3/dist-packages/pyudev/_ctypeslib/libudev.py
libudev1:amd64: /usr/lib/x86_64-linux-gnu/libudev.so.1.7.1
libudev-dev:amd64: /usr/lib/x86_64-linux-gnu/libudev.so
libudev1:amd64: /usr/lib/x86_64-linux-gnu/libudev.so.1
libudev-dev:amd64: /usr/include/libudev.h
libudev1:i386: /usr/lib/i386-linux-gnu/libudev.so.1.7.1
libudev-dev:amd64: /usr/share/man/man3/libudev.3.gz
Qual pacote do Ubuntu conterá a libudev.a
biblioteca?
Bem, não está disponível upstream e no Debian também.
Aqui está um relatório de bug relacionado #915566 no Debian e eles acabam não implementando a solução devido aos grandes arquivos estáticos resultantes e nenhuma demanda dos usuários.
Faz parte do
systemd
, você poderá compilá-lo usando estes sinalizadores:-Dstatic-libsystemd=true -Dstatic-libudev=true
. Veja o relatório de bug referenciado.