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.a或libsomething.dyn?
好的,谢谢你的所有答案,它现在正在运作.一个小问题仍然存在:简单地省略"lib"或者是否有一种标准化的方法来查找名称是一种惯例吗?
lib如果使用-l开关,则不需要该部件.
LDLIBS=-Llibraries/jpeg-8b-bin/lib -ljpeg
# ^^^^
Run Code Online (Sandbox Code Playgroud)
无论何时编写-lxxx,链接器都会libxxx.<ext>在所有提供的库路径中查找包含文件名的库.这是ld大多数基于UNIX的链接器的标准约定,并且应该如此.