Estoy construyendo la biblioteca de indicadores de línea de comandos google-gflags para C++ en Mac OS X (10.7.1). El proceso de construcción es como tal:Cómo modifico el nombre de instalación de un .dylib en el momento de compilación
$ ./configure --prefix=output
$ make
$ make install
me gustaría cambiar el nombre de la instalación de la biblioteca compartida generada en tiempo de compilación y no utilizar install_name_tool
después.
Por defecto, el install name de la biblioteca compartida generada, libgflags.dylib
, es la ruta de salida:
$ otool -L ./output/libgflags.dylib
$ ./output/libgflags.dylib:
/tmp/gflags-1.5/output/lib/libgflags.0.dylib (compatibility version 2.0.0, current version 2.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
La página del manual para ld(1)
tiene una opción -install_name
que se puede utilizar para cambiar el nombre de la instalación de una dinámica biblioteca en tiempo de enlace.
Por ejemplo, con un programa simulado:
$ g++ -dynamiclib temp.cc -install_name /tmp/temp.dylib -o temp.dylib
$ otool -L temp.dylib
temp.dylib:
/tmp/temp.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
Pero, no soy capaz de usar esta opción de línea de comandos con el guión ./configure
. He intentado manualmente estableciendo la variable de CFLAGS
, pero que resulta en un error:
$ CFLAGS="-install_name /tmp/desired/location/libgflags.dylib" ./configure
checking for a BSD-compatible install... /opt/local/bin/ginstall -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/Users/vibhav/Code/install_name_test/gflags-1.5':
configure: error: C compiler cannot create executables
Por lo tanto, ¿es posible para mí para cambiar el nombre de instalar .dylib generada por configure
y sin utilizar make
install_name_tool
?
No entiendo lo que estás tratando de hacer. ¿Por qué no puedes simplemente ejecutar './configure --prefix/tmp/desired/location'? – adl
Esa es una pregunta válida. No puedo establecer '--prefix' en esa ubicación por varias razones, incluyendo que mi ubicación de compilación es diferente de la ubicación de" instalación "de mi aplicación. Simplemente quiero pasar el indicador del enlazador apropiado mientras uso 'configure'. – v8891
Su escenario aún no está claro para mí. ¿Podría explicarnos cómo el estándar './configure --prefix/somewhere && make && make install' es incorrecto para su configuración? ¿Por qué importaría tu ubicación de construcción? (Debería usar un prefijo absoluto, por supuesto.) ¿Está tratando de vincular a 'libglflags' sin instalarlo? (En ese caso, debe usar 'libtool' para vincular su aplicación con' libflag.la' y dejar que libtool haga su magia para enlazar con una biblioteca no instalada.) ¿Desea instalar la biblioteca en una ubicación temporal antes de que sea copiado a su ubicación final? (Es un trabajo para la variable DESTDIR.) – adl