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

Gar*_*ngh 9 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
Run Code Online (Sandbox Code Playgroud)

更新:以下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
Run Code Online (Sandbox Code Playgroud)

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

zti*_*tik 7

您的问题是引用gcc链接器(或简称ld).可以在gcc" 链接选项"ld" 命令行选项 "中找到描述.

从您获得的文档

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

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

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

请注意,在文档中注意到:

ld将在其路径列表中搜索指定的每个归档的lib archive .a .