Как изменить имя установки .dylib во время сборки - PullRequest
7 голосов
/ 24 августа 2011

Я собираю библиотеку 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) 

Страница man для 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?

Ответы [ 2 ]

6 голосов
/ 29 августа 2012

Как правило, передача аргументов компоновщика через g ++ должна начинаться с -Wl, а пробелы должны заменяться запятыми. Поэтому, если вы хотите передать компоновщику «-install_name /tmp/temp.dylib», вам нужно будет вызвать это:

g++ -Wl,-install_name,/tmp/temp.dylib ...
5 голосов
/ 30 октября 2012

Одним из возможных подходов будет редактирование config.status вручную.но прежде чем я попытаюсь это сделать, install_name_tool -id спас мне жизнь.

...