Buduję bibliotekę wiersza poleceń biblioteki poleceń dla C++ na Mac OS X (10.7.1). Proces kompilacji jest jako takie:Jak zmodyfikować nazwę instalacji pliku .dylib w czasie kompilacji
$ ./configure --prefix=output
$ make
$ make install
Chciałbym zmienić nazwę install wygenerowanego udostępnionej biblioteki w czasie kompilacji i nie używać install_name_tool
później.
Domyślnie install name wygenerowanego udostępnionej biblioteki, libgflags.dylib
, to ścieżka wyjściowa:
$ 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)
Strona man dla ld(1)
ma -install_name
opcji, która może być wykorzystana do zmiany instalacji nazwa dynamiczny biblioteka w czasie łącza.
Na przykład, z fikcyjnego programu:
$ 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)
Ale nie jestem w stanie używać tej opcji wiersza polecenia ze skryptu ./configure
. Próbowałem ręcznie ustawiając zmienną CFLAGS
, ale to prowadzi do błędu:
$ 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
Tak, jest to możliwe dla mnie, aby zmienić nazwę instalacja .dylib generowane przez configure
i make
bez użycia install_name_tool
?
Nie rozumiem, co próbujesz zrobić. Dlaczego po prostu nie możesz uruchomić './configure --prefix/tmp/desired/location'? – adl
To jest poprawne pytanie. Nie mogę ustawić '--prefix' do tej lokalizacji z różnych powodów, w tym, że moja lokalizacja kompilacji różni się od położenia" zainstaluj "mojej aplikacji. Po prostu chcę przekazać odpowiednią flagę linkera podczas używania 'configure'. – v8891
Twój scenariusz nadal nie jest dla mnie jasny. Czy możesz wyjaśnić, w jaki sposób standardowa konfiguracja './configure --prefix/somewhere && make && make install' jest niepoprawna dla twojej instalacji? Dlaczego lokalizacja twojej budowy ma znaczenie? (Powinieneś oczywiście użyć bezwzględnego prefiksu.) Czy próbujesz połączyć się z 'libglflags' bez instalowania? (W takim przypadku powinieneś użyć 'libtool', aby połączyć twoją aplikację z' libflag.la' i pozwolić libtoolowi zrobić magię, aby połączyć się z niezainstalowaną biblioteką.) Czy chcesz zainstalować bibliotekę w tymczasowej lokalizacji zanim zostanie ona zainstalowana? skopiowane do ostatecznej lokalizacji? (To zadanie dla zmiennej DESTDIR). – adl