2012-02-12 23 views
5

Projekt, nad którym pracuję, wykorzystuje niestandardowy system dystrybucji, który wewnętrznie pobiera i kompiluje biblioteki zależności. Ta skrytka uruchamia dla każdej biblioteki skrypt configure, podając jako przedrostek wewnętrzny katalog systemu kompilującego. Następnie uruchamia make i make install, a następnie sprawdza zawartość, wyszukując katalog instalacyjny z plikiem lib/<mylib>.a. Ten ostatni krok kończy się niepowodzeniem.Katalog lib w 64-bitowej dystrybucji OpenSuse

Próbując zrozumieć, co się dzieje, samodzielnie skompilowałem parę losowych bibliotek, w tym jedną, której jestem autorem. Zauważyłem, że pod moją dystrybucją (openSUSE, 64-bitowa) ścieżka instalacji nie jest wypełniona /lib, ale zamiast niej jest /lib64.

To jasne, że jest to ustawienie rozkładu, i jestem pewien, że to ustawienie dotyczy konfiguracji autotools wysyłanych z dystrybucji.

Czy istnieje sposób zmiany tego zachowania lub, alternatywnie, odczytania tej informacji z systemu (aby można było załatać wyżej wymieniony garnek)?

Dzięki za pomoc

UPDATE: dowiedziałem się o flagę --libdir w configure, więc myślę, że mogę rozwiązać mój problem. Nadal chciałbym wiedzieć, czy istnieje sposób na poznanie tego szczegółu z jakimś zapytaniem o dystrybucję (np. Przeczytaj jakiś plik konfiguracyjny).

+0

Nie ma to nic wspólnego z autoconf w systemie, ponieważ nie działa autoconf. –

+0

@WilliamPursell: Nie jestem, ale używam skryptu 'configure'. Domyślam się, że system kompilujący 'configure' może odczytać pewną konfigurację z systemu operacyjnego (na przykład jakiś plik w'/etc/') w celu ustalenia, gdzie system operacyjny powinien znaleźć biblioteki. – Dacav

+0

Jeśli skrypt configure szuka w/etc /, jest to błąd w pakiecie. Nigdy nie widziałem zachowania, które opisujesz. Możliwe, że generujesz skrypty konfiguracyjne z poprawioną wersją autoconf. Czy skrypt configure zawiera linię "libdir = '$ {exec_prefix}/lib'"? –

Odpowiedz

5

Skrypt konfiguracyjny nigdy nie powinien próbować przyjmować założeń dotyczących maszyny ani próbować instalować bibliotek w lokalizacjach innych niż $ {exec_prefix}/lib, chyba że użytkownik jawnie zażąda innej lokalizacji dla $ libdir. Jednym z mechanizmów, za pomocą których użytkownik może jawnie zażądać alternatywnej lokalizacji, jest plik config.site. Jeśli istnieje plik $ {prefix} /share/config.site, może on określić alternatywną wartość dla $ libdir, powodując, że użytkownik nieświadomie jawnie określa alternatywną lokalizację instalacji.

3

To dobra odpowiedź Williama Pursella. Chciałem tylko dodać, ponieważ to pytanie dotyczy przede wszystkim openSUSE, że openSUSE nie instaluje pliku o nazwie config.site. Odpowiedni plik jest faktycznie instalowany w /usr/share/site za pośrednictwem rpm site-config, a następnie aktywowany przez /etc/profile/site.{c,}sh, który eksportuje zmienną środowiskową CONFIG_SITE w celu wskazania tego pliku. Ta zmienna jest następnie honoured by autoconf, jak być może już widziałeś.