Gcc в Mac OS X: как связать библиотеки, установленные с MacPorts?

Я установил gcc 4.6, используя macports. Префикс /opt/local, и я получаю ожидаемый путь include:

#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.

Однако /opt/local/lib, похоже, не находится в пути поиска библиотеки, поэтому я должен указать его с помощью -L/opt/local/lib при использовании g++ в командной строке:

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/

Это проблема для других библиотек, установленных с macports. Есть ли простой способ добавить /opt/local/lib в путь поиска библиотеки? Я пробовал установку DYLD_LIBRARY_PATH безрезультатно. Я использую Mac OS X 10.6.8.

Ответ 1

в вашем ~/.profile добавьте следующую строку:

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

и запустите source ~/.profile в терминале, чтобы перезагрузить свой профиль.

Таким образом, ключ -L будет обнаружен из gcc/g++ и автоматически использован.

Ответ 2

Это зависит от того, хотите ли вы связать исполняемый динамический или статический файл с библиотекой. В OS X вы добавляете библиотеки в качестве исходных/объектных файлов следующим образом:

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

Лучший способ - использовать систему сборки, например CMake (которую можно установить из macports). И позволяет легко находить библиотеки, создавать библиотеки кроссплатформенным способом.

Ответ 3

Я нашел самый простой способ - установить C_INCLUDE_PATH и LIBRARY_PATH:

export C_INCLUDE_PATH=/opt/local/include
export CPLUS_INCLUDE_PATH=/opt/local/include
export LIBRARY_PATH=/opt/local/lib