4

我正在尝试构建一个共享库,但出现以下错误:

libavformat.so:未找到符号 av_dup_packet@LIBAVFORMAT_52 的版本节点

ld:未能设置动态部分大小:错误值

有谁知道这个错误是什么意思?主机是 i586-linux 目标是 arm-linux

编辑:已解决,见评论

4

4 回答 4

3

它是由内联汇编指令引起的.symver。我的解决方案是手动修改生成的 config.h 以禁用版本节点符号。

查看internal.h第 214-223 行

于 2010-06-28T14:59:30.127 回答
2

我在将libsctp构建到自定义构建环境时遇到了这个错误。

这里解释了符号版本控制,并且可以使用链接描述文件来控制它。在我的情况下,我能够通过添加到特定于目标的 LDFLAGS makefile 变量来提取现有版本的链接器脚本:

$(LIB_PATH)/libsctp.so: LDFLAGS += \
    -Xlinker --version-script=$(MODULE_PATH)/src/lib/Versions.map
于 2017-01-23T21:42:33.043 回答
1

哦,该功能已于 2009年4 月从. internal.h 中的注释明确指出:libavformat/util.clibavcodec/avpacket.c

如果将一个函数从一个库移动到另一个库,则必须将包装器保留在原始位置以保持二进制兼容性。

但是当函数在库之间移动时,不可能保持二进制兼容性。

请注意,这个错误是一年多前在Chromium 项目中报告的。

顺便说一句,无需config.h手动编辑:您可以运行./configure --disable-symver.

于 2011-12-06T16:15:48.827 回答
0

其他人向我指出了这一点,所以我想我不妨把它放在这里,这样像我这样的其他人就可以理解 ognian 的回答:

这转化为config.h在您运行./configure并将SYMVER-related 条目设置为 0 后进行编辑。像这样:

#define HAVE_SYMVER 0
#define HAVE_SYMVER_GNU_ASM 0
#define HAVE_SYMVER_ASM_LABEL 0
于 2011-12-06T04:40:11.697 回答