gcc 链接器错误:找不到符号的版本节点

发布于 2024-09-07 11:39:24 字数 250 浏览 4 评论 0原文

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

libavformat.so:找不到版本节点 对于符号 av_dup_packet@LIBAVFORMAT_52

ld: 无法设置动态部分大小: 价值不高

有人知道这个错误意味着什么吗?主机是i586-linux 目标是arm-linux

编辑:已解决,请参阅评论

I'm trying to build a shared library, and I get the following error:

libavformat.so: version node not found
for symbol
av_dup_packet@LIBAVFORMAT_52

ld:
failed to set dynamic section sizes:
Bad value

Does anybody knows what this error means? Host is i586-linux target is arm-linux

Edit: Resolved, see comments

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

柠檬色的秋千 2024-09-14 11:39:43

需要其他人向我指出这一点,所以我想我最好把它放在这里,以便其他像我这样的人可以理解奥格尼安的答案:

这转化为在运行 后编辑 config.h >./configure 并将 SYMVER 相关条目设置为 0。如下所示:

#define HAVE_SYMVER 0
#define HAVE_SYMVER_GNU_ASM 0
#define HAVE_SYMVER_ASM_LABEL 0

It took someone else to point this out to me, so I thought I might as well put it on here so others like me can understand ognian's answer:

This translates to editing config.h after you run ./configure and making the SYMVER-related entries are set to 0. Like so:

#define HAVE_SYMVER 0
#define HAVE_SYMVER_GNU_ASM 0
#define HAVE_SYMVER_ASM_LABEL 0
冷情妓 2024-09-14 11:39:40

哦,该函数已于 2009 年 4 月移至libavformat/util.c 复制到 libavcodec/avpacket.c 中的新文件。 internal.h 中的注释明确指出:

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

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

请注意,此错误已在 Chromium 项目中报告了一年多前。

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

Oh, the function was moved in April 2009 from libavformat/util.c to a new file in libavcodec/avpacket.c. The comment in internal.h states explicitly:

If a function is moved from one library to another, a wrapper must be retained in the original location to preserve binary compatibility.

But it is impossible to retain binary compatibility when a function is moved between libraries.

Note that this bug was reported in Chromium project more than a year ago.

By the way, there is no need to edit config.h manually: you can run ./configure --disable-symver.

葵雨 2024-09-14 11:39:37

在将 libsctp 构建到自定义构建环境中时,我遇到了此错误。

符号版本控制在此处进行了解释,并且可以使用链接器脚本来控制它。就我而言,我可以通过添加到特定于目标的 LDFLAGS makefile 变量来拉入现有版本链接器脚本:

$(LIB_PATH)/libsctp.so: LDFLAGS += \
    -Xlinker --version-script=$(MODULE_PATH)/src/lib/Versions.map

I ran into this error when building libsctp into a custom build environment.

Symbol Versioning is explained here and a linker script may be used to control it. In my case I was able to pull in the existing version linker script by adding to the target-specific LDFLAGS makefile variable:

$(LIB_PATH)/libsctp.so: LDFLAGS += \
    -Xlinker --version-script=$(MODULE_PATH)/src/lib/Versions.map
如梦初醒的夏天 2024-09-14 11:39:34

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

查看 内部.h第214-223行

It was caused by an inline assembly directive .symver. My solution was to manually modify the generated config.h to disable version nodes symbols.

Check out internal.h lines 214-223

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文