gcc: Difference between -L and -l option AND how to provide complete path to a library

最后都变了- 提交于 2020-01-12 05:04:39

问题


I am new to makefile stuff; so, please accept my apology if my questions are trivials.

Question 1: What is the difference between -L and -l option.

Question 2: How do you provide complete path to some library? For instance, "libeng" and "libmx", mentioned in following makefile,are located at {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

Update: Following makefile works:

# 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

I found following link about linking libraries very useful: http://www.cs.swarthmore.edu/~newhall/unixhelp/howto_C_libraries.html


回答1:


Your question is refering to gcc linker (or simply ld). Discription can be found in in gcc's Options for Linking or ld's Command Line Options.

From the documentation you get

-larchive Add archive file archive to the list of files to link. ld will search its path-list for occurrences of libarchive.a for every archive specified.

-Lsearchdir Add path searchdir to the list of paths that ld will search for archive libraries and ld control scripts.

In your example you need to use -L to define the path where libeng and libmx libraries are located. Then use -l option to instruct ld to use these libraries.

Note that in the documentation is noted that:

ld will search its path-list for occurrences of libarchive.a for every archive specified.



来源:https://stackoverflow.com/questions/29468211/gcc-difference-between-l-and-l-option-and-how-to-provide-complete-path-to-a-l

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!