我是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
答案 0 :(得分:7)
您的问题是引用gcc
链接器(或简称为ld
)。
可以在gcc
Options for Linking或ld
' s Command Line Options中找到解说。
从您获得的文档中
-larchive 将存档文件存档添加到要链接的文件列表中。 ld将为其路径列表搜索指定的每个归档的libarchive.a。
-Lsearchdir 将路径searchdir添加到ld将搜索归档库和ld控制脚本的路径列表中。
在您的示例中,您需要使用-L
来定义libeng
和libmx
库所在的路径。然后使用-l
选项指示ld
使用这些库。
请注意,在文档中注明:
ld将在路径列表中搜索指定的每个存档的lib 存档 .a。