我正在尝试构建一个共享库,但出现以下错误:
libavformat.so:未找到符号 av_dup_packet@LIBAVFORMAT_52 的版本节点
ld:未能设置动态部分大小:错误值
有谁知道这个错误是什么意思?主机是 i586-linux 目标是 arm-linux
编辑:已解决,见评论
我正在尝试构建一个共享库,但出现以下错误:
libavformat.so:未找到符号 av_dup_packet@LIBAVFORMAT_52 的版本节点
ld:未能设置动态部分大小:错误值
有谁知道这个错误是什么意思?主机是 i586-linux 目标是 arm-linux
编辑:已解决,见评论
它是由内联汇编指令引起的.symver
。我的解决方案是手动修改生成的 config.h 以禁用版本节点符号。
查看internal.h第 214-223 行
我在将libsctp构建到自定义构建环境时遇到了这个错误。
这里解释了符号版本控制,并且可以使用链接描述文件来控制它。在我的情况下,我能够通过添加到特定于目标的 LDFLAGS makefile 变量来提取现有版本的链接器脚本:
$(LIB_PATH)/libsctp.so: LDFLAGS += \
-Xlinker --version-script=$(MODULE_PATH)/src/lib/Versions.map
哦,该功能已于 2009年4 月从. internal.h 中的注释明确指出:libavformat/util.c
libavcodec/avpacket.c
如果将一个函数从一个库移动到另一个库,则必须将包装器保留在原始位置以保持二进制兼容性。
但是当函数在库之间移动时,不可能保持二进制兼容性。
请注意,这个错误是一年多前在Chromium 项目中报告的。
顺便说一句,无需config.h
手动编辑:您可以运行./configure --disable-symver
.
其他人向我指出了这一点,所以我想我不妨把它放在这里,这样像我这样的其他人就可以理解 ognian 的回答:
这转化为config.h
在您运行./configure
并将SYMVER
-related 条目设置为 0 后进行编辑。像这样:
#define HAVE_SYMVER 0
#define HAVE_SYMVER_GNU_ASM 0
#define HAVE_SYMVER_ASM_LABEL 0