【问题标题】:gcc: Difference between -L and -l option AND how to provide complete path to a librarygcc:-L 和 -l 选项之间的区别以及如何提供库的完整路径
【发布时间】:2015-04-06 09:01:30
【问题描述】:

我是 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

【问题讨论】:

  • 这些是 GCC 选项,而不是 Make 选项。您可以通过阅读手册了解它们。
  • @OliverCharlesworth 谢谢。我能够修改。
  • 您通常不会在-l 选项之后包含文件名的“lib”部分。例如-llibmx 通常写成-lmx。我很惊讶前者完全有效。

标签: g++


【解决方案1】:

您的问题是指gcc 链接器(或简称ld)。 描述可以在gccOptions for LinkingldCommand Line Options中找到。

从您获得的文档中

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

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

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

请注意,在文档中指出:

ld 将在其路径列表中搜索 libarchive.a 对于每个指定的 archive 的出现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-23
    • 2013-07-04
    • 2018-09-09
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2017-07-26
    • 2016-11-09
    相关资源
    最近更新 更多