2011-07-18 14 views
11

Zainstalowałem gcc 4.6 za pomocą Macports. Przedrostek jest /opt/local i uzyskać oczekiwany zawierać ścieżkę:gcc na Mac OS X: jak połączyć biblioteki zainstalowane z MacPorts?

#include "..." search starts here: 
#include <...> search starts here: 
/opt/local/include/gcc46/c++/ 
/opt/local/include/gcc46/c++//x86_64-apple-darwin10 
/opt/local/include/gcc46/c++//backward 
/opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1/include 
/opt/local/include 
/opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1/include-fixed 
/usr/include 
/System/Library/Frameworks 
/Library/Frameworks End of search list. 

Jednak /opt/local/lib nie wydają się być w ścieżce wyszukiwania w bibliotece, więc muszę podać go -L/opt/local/lib przy użyciu g ++ w wierszu poleceń:

Library search paths: 
    /opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1 
    /opt/local/lib/gcc46 
    /usr/lib 
    /usr/local/lib 
Framework search paths: 
    /Library/Frameworks/ 
    /System/Library/Frameworks/ 

Jest to problem dla innych bibliotek zainstalowanych z użyciem urządzeń Mac. Czy istnieje prosty sposób dodania /opt/local/lib do ścieżki wyszukiwania biblioteki? Próbowałem ustawić DYLD_LIBRARY_PATH bezskutecznie. Używam Mac OS X 10.6.8.

+0

'DYLD_LIBRARY_PATH' służy do dynamicznego ładowania w czasie wykonywania, a nie do czasu kompilacji. – Dani

Odpowiedz

2

To zależy, czy chcesz połączyć plik wykonywalny lub statyczny z biblioteką. Pod OS X można dodawać biblioteki jako źródło plików/obiektów, takich jak ten:

Dynamic: g++ -Wall -o myexecutable myfile.cpp /path/to/library.dylib 
Static: g++ -Wall -o myexecutable myfile.cpp /path/to/library.a 

Najlepszym sposobem jest użycie systemu kompilacji, na przykład CMake (który można zainstalować z DarwinPorts). Dzięki temu bardzo łatwo można znaleźć biblioteki, tworzyć biblioteki w sposób krzyżowy.

+1

Moje pytanie dotyczy raczej ustawienia '/ opt/local/lib' w ścieżce wyszukiwania biblioteki gcc. Gcc jest wbudowany/opt/local, więc spodziewam się, że będzie to ścieżka wyszukiwania, ale tak nie jest. – juanchopanza

7

w pliku ~/.profile dodać następujący wiersz:

export LDFLAGS="-L/opt/local/lib" 

i uruchomić source ~/.profile w terminalu, aby odświeżyć swój profil.

W ten sposób przełącznik -L zostanie wykryty z gcc/g ++ i użyty automatycznie.

+0

Jak się budujesz? Jeśli używam po prostu linii poleceń g ++, ta zmienna środowiskowa nie ma żadnego efektu. – juanchopanza

+2

należy użyć zmiennej LIBRARY_PATH, bez "-L" – hbogert