c++ - 查找库的 "name"(-L -l 开关)

标签 c++ compiler-construction g++ command-line-arguments

作为 C++ 的新手,我基本上有一个关于 g++ 编译器的问题,尤其是库的包含。考虑以下生成文件:

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

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

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


好的,感谢您的所有回答,现在可以使用了。 一个小问题仍然存在:简单地省略“lib”是一种惯例还是有一种标准化的方法来查找名称?

最佳答案

您不需要 lib如果您使用 -l 部分开关。

LDLIBS=-Llibraries/jpeg-8b-bin/lib -ljpeg
#                                    ^^^^

每当你写-lxxx , 链接器将查找文件名为 libxxx.<ext> 的库在所有提供的库路径中。这是 ld 的标准约定,并且对于大多数基于 UNIX 的链接器来说应该是正确的。

关于c++ - 查找库的 "name"(-L -l 开关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2911318/

相关文章:

c++ - float2 和 cuComplex 有什么区别,要使用哪个?

c++ - gcc 优化

c++ - 编译 C++ 代码时出现 ios::nocreate 错误

objective-c - Xcode 中 2 个第三方库的重复符号问题

windows - 如何在 Windows 上使用 cmake + arm-none-eabi 进行交叉编译?

c++ - 如果函数在类范围内声明,则 constexpr 不起作用

c++ - 枚举大小 *在实践中*

C++ 指向成员函数、成员的指针

c - GCC 中是否有 __int32 的对应项?

for 循环与 while 循环的 C++ 行为