Tengo Ubuntu 14.04 actualizado de 12.04 haciendo dist-upgrades. Hice muchas instalaciones manuales como ffmpeg, libglib, etc. en el pasado. Ahora tengo una buena distribución personalizada, funciona bien pero tengo problemas al intentar comstackr aplicaciones. Se origina en conflictos de biblioteca entre packages instalados manualmente desde el código fuente y las bibliotecas de distribución nativas. Un chico me aconsejó cambiar el nombre de /usr/local
, pero el arranque falló en el próximo reinicio.
Cuando busco directorys agregados por pkg-config
con
pkg-config --variable pc_path pkg-config
list
/usr/local/lib/i386-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
No quiero que busque routes en /usr/local/lib...
¿Cómo puedo prohibir esas routes para no permitir que pkg-config
busque?
Las cosas en /usr/local
generalmente reemplazan las cosas en /usr
, así que estoy un poco confundido sobre por qué instalarías bibliotecas allí para tener una "buena distribución personalizada", pero luego no querías comstackr contra ellas. Esas son las bibliotecas que usará el sistema en realidad.
De todos modos, man pkg-config
reclama la ruta de búsqueda básica:
es libdir / pkgconfig: datadir / pkgconfig donde libdir es libdir para pkg-config y datadir es el datadir para pkg-config cuando se instaló.
Esto implica que están comstackdos. Noté que es diferente en ubuntu que en fedora: el primero es largo e inclusivo, mientras que el último es breve y exclusivo; en fedora tengo que establecer $PKG_CONFIG_PATH
para include /usr/local
.
Como las routes en $PKG_CONFIG_PATH
se verifican primero , puede establecer:
PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
El hecho de que estos estén al final de las routes incorporadas no importará; si el cheque llega hasta allí sin encontrar nada, no hay nada que encontrar.
Para demostrar cómo funciona esto, cree un directory temporal /opt/bs/pkg
y copie un file .pc
de uno de los directorys en la ruta pnetworkingeterminada en él, por ejemplo, alsa.pc
Primer cheque;
> pkg-config --libs alsa -lasound
Ahora vaya a /opt/bs/pkg/alsa.pc
y cambie -lasound
(está en el campo Libs:
-foobar
a -foobar
. Establezca $PKG_CONFIG_PATH
y vuelva a intentarlo:
> PKG_CONFIG_PATH=/opt/bs/pkg pkg-config --libs alsa -foobar
Eureka, $PKG_CONFIG_PATH
ha anulado las routes incorporadas … puede eliminar /opt/bs/pkg
, por supuesto.