Я создаю библиотеку флагов командной строки google-gflags для C++ в Mac OS X (10.7 .1). Процесс сборки такой:
$ ./configure --prefix=output
$ make
$ make install
Я хотел бы изменить имя установки сгенерированной общей библиотеки во время сборки и не использовать install_name_tool
впоследствии.
По умолчанию имя установки сгенерированной разделяемой библиотеки, libgflags.dylib
, является выходным путем:
$ 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)
На странице руководства для ld(1)
есть параметр -install_name
, который можно использовать для изменения имени установки динамической библиотеки во время компоновки.
Например, с фиктивной программой:
$ 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)
Но я не могу использовать этот параметр командной строки со сценарием ./configure
. Я пытался вручную установить переменную CFLAGS
, но это приводит к ошибке:
$ 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
Итак, могу ли я изменить имя установки .dylib, сгенерированное configure
и make
, без использования install_name_tool
?
./configure --prefix /tmp/desired/location
? - person adl   schedule 24.08.2011--prefix
в это место по разным причинам, в том числе из-за того, что место моей сборки отличается от места установки моего приложения. Я просто хочу передать соответствующий флаг компоновщика при использованииconfigure
. - person v8891   schedule 24.08.2011./configure --prefix /somewhere && make && make install
не подходит для вашей установки? Почему ваше место сборки имеет значение? (Конечно, вы должны использовать абсолютный префикс.) Вы пытаетесь создать ссылку наlibglflags
, не устанавливая его? (В этом случае вы должны использоватьlibtool
, чтобы связать свое приложение сlibflag.la
, и позволить libtool сделать свое волшебство, чтобы связать неустановленную библиотеку.) Вы хотите установить библиотеку во временное местоположение, прежде чем она будет скопирована в ее окончательное местоположение? (Это работа для переменной DESTDIR.) - person adl   schedule 25.08.2011-headerpad_max_install_names
для компиляции и компоновки. Затем, когда выmake install
, вы используетеinstall_name_tool
для обновления записи, чтобы она указывала на полное имя пути ( то есть,/usr/local/lib/libfoo.dylib
). Ник X в основном ответил так же, но не упомянул рекомендацию Apple или-headerpad_max_install_names
. - person jww   schedule 02.03.2016