开发者

gcc on Mac OS X: how to link libraries installed with MacPorts?

开发者 https://www.devze.com 2023-03-21 07:44 出处:网络
I have installed gcc 4.6 using macports. The p开发者_Python百科refix is /opt/local, and I get the expected include path:

I have installed gcc 4.6 using macports. The p开发者_Python百科refix is /opt/local, and I get the expected include path:

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

However, /opt/local/lib doesn't seem to be in the library search path, so I have to specify it with -L/opt/local/lib when using g++ on command line:

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/

This is a problem for other libraries installed with macports. Is there an easy way to add /opt/local/lib to the library search path? I have tried setting DYLD_LIBRARY_PATH to no avail. I am using Mac OS X 10.6.8.


in your ~/.profile add the following line:

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

and run source ~/.profile in the terminal to reload your profile.

In this way, the -L switch will be detected from gcc/g++ and used automaticaly.


It depends if you want to link your executable dynamic or static against a library. Under OS X you add the libraries as source/object files like this:

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

The best way is to use a build system, for example CMake (which can be installed from macports). And makes it very easy to find libraries, create libraries in a crossplatform way.


I found the easiest way is to set C_INCLUDE_PATH and LIBRARY_PATH:

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

精彩评论

暂无评论...
验证码 换一张
取 消