Mac OS X上的gcc:如何链接与MacPorts一起安装的库?

jua*_*nza 11 macos linker gcc g++ macports

我使用macports安装了gcc 4.6.前缀是/opt/local,我得到了预期的包含路径:

#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.
Run Code Online (Sandbox Code Playgroud)

但是,/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/
Run Code Online (Sandbox Code Playgroud)

对于安装了macport的其他库,这是一个问题.有没有一种简单的方法可以添加/opt/local/lib到库搜索路径?我试过设置DYLD_LIBRARY_PATH无济于事.我使用的是Mac OS X 10.6.8.

Mic*_* Xu 7

在你的〜/ .profile中添加以下行:

export LDFLAGS="-L/opt/local/lib"
Run Code Online (Sandbox Code Playgroud)

source ~/.profile在终端中运行以重新加载您的个人资料.

这样,-L开关将从gcc/g ++中检测并自动使用.

  • 应使用LIBRARY_PATH变量,不带"-L" (2认同)

小智 4

这取决于您是否要将可执行文件动态或静态链接到库。在 OS X 下,您可以将库添加为源/目标文件,如下所示:

 Dynamic: g++ -Wall -o myexecutable myfile.cpp /path/to/library.dylib
 Static: g++ -Wall -o myexecutable myfile.cpp /path/to/library.a
Run Code Online (Sandbox Code Playgroud)

最好的方法是使用构建系统,例如 CMake(可以从 macports 安装)。并且使得查找库、以跨平台的方式创建库变得非常容易。