gcc:-L和-l选项之间的区别以及如何提供库的完整路径

时间:2015-04-06 09:01:30

标签: g++

我是makefile的新手;所以,如果我的问题很简单,请接受我的道歉。

问题1 :-L和-l选项之间有什么区别。

问题2 :您如何提供某些图书馆的完整路径?例如,以下makefile中提到的“libeng”和“libmx”位于{MATLABROOT} / bin / glnxa64

# root directory of MATLAB installation
MATLABROOT="/usr/local/MATLAB/R2011b"

all: engdemo

engdemo:
    g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
        -I${MATLABROOT}/extern/include \
        -L${MATLABROOT}/extern/lib -llibeng -llibmx

clean:
    rm -f engdemo *.o

更新: 以下makefile有效:

# root directory of MATLAB installation
MATLABROOT="/usr/local/MATLAB/R2011b"

all: engdemo

engdemo:
    g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
        -I${MATLABROOT}/extern/include \
        #-L${MATLABROOT}/extern/lib -llibeng -llibmx
    -L${MATLABROOT}/bin/glnxa64 -llibeng \
    -L${MATLABROOT}/bin/glnxa64 -llibmx

clean:
rm -f engdemo *.o

我发现关于链接库的以下链接非常有用: http://www.cs.swarthmore.edu/~newhall/unixhelp/howto_C_libraries.html

1 个答案:

答案 0 :(得分:7)

您的问题是引用gcc链接器(或简称为ld)。 可以在gcc Options for Linkingld' s Command Line Options中找到解说。

从您获得的文档中

  

-larchive      将存档文件存档添加到要链接的文件列表中。 ld将为其路径列表搜索指定的每个归档的libarchive.a。

     

-Lsearchdir       将路径searchdir添加到ld将搜索归档库和ld控制脚本的路径列表中。

在您的示例中,您需要使用-L来定义libenglibmx库所在的路径。然后使用-l选项指示ld使用这些库。

请注意,在文档中注明:

  

ld将在路径列表中搜索指定的每个存档的lib 存档 .a。