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

问题描述 投票:0回答:2

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

g++
2个回答
21
投票

您的问题是指

gcc
链接器(或简称
ld
)。 说明可以在
gcc
链接选项
ld
命令行选项中找到。

从你得到的文档

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

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

在您的示例中,您需要使用

-L
来定义
libeng
libmx
库所在的路径。然后使用
-l
选项指示
ld
使用这些库。

请注意,在文档中指出:

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


0
投票

去阅读文档通常是很好的建议,但是当它不起作用时你会怎么做。以上这些回答,至少是居高临下的。

我在用 g++ -l:/usr/local/lib/libname.so.2.70 lib 确实存在。但是带有 -v 选项的 g++ 说找不到它。

我尝试了很多名字,但没有任何效果

真正的答案将不胜感激

© www.soinside.com 2019 - 2024. All rights reserved.