gpt4 book ai didi

c -lz 库链接顺序(对符号 "inflateInit2_"的 undefined reference )

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:02 26 4
gpt4 key购买 nike

我按此顺序链接 CodeBlocks 中的库,

-lz
-L/usr/local/lib
-L/usr/local/include
-pthread
-lswscale
-lavutil
-lavcodec
-lmp3lame
-lopus
-ltiff
-lvorbis
-ltheora
-ltheoraenc
-ltheoradec
-lvorbisenc
-ltiffxx
-llzma
-lva
-lavfilter
-lavformat
-lfreetype

仍然有错误:

undefined reference to symbol "inflateInit2_"

请问是不是库链接顺序问题?我应该把 -lz 放在哪里?

最佳答案

对于 GCC 和 Clang(可能还有 Intel 编译器),规则是命令行中前面指定的库满足命令行中后面指定的引用。

例如,如果foo.c 引用库bar 中的函数,那么编译是正确的

$ gcc foo.c -lbar

, 编译不正确

$ gcc -lbar foo.c

因此,最安全的做法是将 -lz 放在最后,这样它就可以满足前面指定的所有库的引用。

这是 gcc(1) 手册页(-l 选项)中的相关引用:

It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, foo.o -lz bar.o searches library z after file foo.o but before bar.o. If bar.o refers to functions in z, those functions may not be loaded.

然而,更好的可能是使用例如pkg-config(1)--libs 以获得特定库所需的标志。一些库还附带用于此目的的自定义脚本(例如,用于 SDL(2) 的 sdl(2)-config)。

关于c -lz 库链接顺序(对符号 "inflateInit2_"的 undefined reference ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29199107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com