我按此顺序链接 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
选项):
在命令中编写此选项的位置会有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,foo.o -lz bar.o
搜索图书馆z文件后foo.o但之前bar.o. If bar.o指的是函数z,这些函数可能不会被加载。
然而,更好的方法可能是使用例如pkg-config(1)
with --libs
获取特定库所需的标志。一些库还为此目的提供了自定义脚本(例如,sdl(2)-config
对于 SDL(2))。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)