2013-04-05 7 views
14

Próbuję dowiedzieć się, jak ustawić pewną zmienną środowiskową, która spowodowałaby, że g ++ będzie łączył się z poprawnymi wersjami bibliotek.GCC, jak domyślnie dodać domyślną ścieżkę wyszukiwania łącznika? LIBRARY_PATH nie działa

Mam kilka starych bibliotek boost w/usr/lib64 (połączenie z nimi nie powiedzie się) i nowe biblioteki w/v/users/regel/lib. Łącznik powinien więc łączyć się z nowymi bibliotekami.

Command:

$ g++ test.cpp -lboost_system -L/v/users/regel/lib 

linki Program poprawnie. Jednak chcę ustawić to jako katalog wyszukiwania nr 1 dla linkera, aby nie musiałem określać "-L" za każdym razem, gdy łączę.

następujące zmienne środowiskowe wydają się nie załatwi:

$ LIBRARY_PATH=/v/users/regel/lib g++ test.cpp -lboost_system 
/tmp/regel/cc4SmBtI.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

i

$ LD_LIBRARY_PATH=/v/users/regel/lib:$LD_LIBRARY_PATH g++ test.cpp -lboost_system 
/tmp/regel/ccUreBZy.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

Pomimo przeczytaniu wielu artykułów i postów na podobne tematy, nie znalazłem jeszcze rozwiązania.

+0

Czy próbowałeś ustawić + eksportowanie LD_LIBRARY_PATH przed uruchomieniem g ++ (zamiast podania go w wierszu poleceń g ++)? –

+0

Próbowałem wyeksportować zarówno LIBRARY_PATH, jak i LD_LIBRARY_PATH przed uruchomieniem g ++. – Regel

+0

@FrankSchmitt, ustawiając sposób, w jaki OP miał taki sam efekt jak eksportowanie (ale ograniczone do tego polecenia i jego potomków), więc to nie pomoże –

Odpowiedz

6

Jako że instrukcja GCC says, LIBRARY_PATH jest poprawną zmienną środowiskową w celu dodania katalogów do ścieżki wyszukiwania biblioteki.

Jeśli dodać -v dowodzić g++ powinieneś zobaczyć LIBRARY_PATH że używa, i powinieneś zobaczyć to zawiera katalog został określony, i że zostanie dodana do polecenia collect2 jako -L, ale można go zobaczyć zostanie dodana po standardowych katalogach, takich jak -L/usr/lib itp

nie znam żadnego sposobu, aby katalogi w LIBRARY_PATH przyjść pierwsze, myślę, że trzeba użyć -L do tego.

+2

Dlaczego była to zaakceptowana odpowiedź?Nie odpowiada na pytanie. –

-1

Spróbuj określający ścieżkę biblioteki w .conf pliku w /etc/ld.so.conf.d/

Łącznik patrzy na ścieżkach określonych w plikach w /etc/ld.so.conf.d/ podczas łączenia.

Upewnij się, że uruchomiłeś "ldconfig" po utworzeniu pliku, który zmusi go do aktualizacji pamięci podręcznej.

+5

Wierzę, że mówisz o ładowaczu (ld.so), a nie linkerze (ld). –

+0

Dlaczego ta odpowiedź jest tak bardzo "minused"? Kiedy robię strace na binarnym gcc, widzę plik /etc/ld.so.conf (który zwykle zawiera ld.so.conf.d/*. Conf). – Kuchara

Powiązane problemy