找到库的"名称"(-L -l开关)

seb*_*ger 0 c++ compiler-construction g++ command-line-arguments

作为C++的新手,我有一个关于g ++编译器的基本问题,特别是包含库.考虑以下makefile:

CPPFLAGS= -I libraries/boost_1_43_0-bin/include/ -I libraries/jpeg-8b-bin/include/
LDLIBS= libraries/jpeg-8b-bin/lib/libjpeg.a
# LDLIBS= -L libraries/jpeg-8b-bin/lib -llibjpeg

all: main

main: main.o
    c++ -o main main.o $(LDLIBS)

main.o: main.cpp
    c++ $(CPPFLAGS) -c main.cpp

clean:
    rm -rf *.o main
Run Code Online (Sandbox Code Playgroud)

如您所见,我声明了两次LDLIBS变量.如果我使用上面的makefile,我的代码正在编译和工作.但是,如果我停用第一个LDLIBS条目并激活第二个LDLIBS条目,我会得到ld: library not found for -llibjpeg.我认为我libjpeg.a只是没有被召唤libjpeg但是有一些不同的名字.

有没有办法找出给定"库文件"的名称libsomething.alibsomething.dyn


好的,谢谢你的所有答案,它现在正在运作.一个小问题仍然存在:简单地省略"lib"或者是否有一种标准化的方法来查找名称是一种惯例吗?

ken*_*ytm 8

lib如果使用-l开关,则不需要该部件.

LDLIBS=-Llibraries/jpeg-8b-bin/lib -ljpeg
#                                    ^^^^
Run Code Online (Sandbox Code Playgroud)

无论何时编写-lxxx,链接器都会libxxx.<ext>在所有提供的库路径中查找包含文件名的库.这是ld大多数基于UNIX的链接器的标准约定,并且应该如此.