gpt4 book ai didi

c++ - 在 Linux 上编译时未定义对 mempcy@GLIBC_2.14 的引用

转载 作者:可可西里 更新时间:2023-11-01 17:52:01 35 4
gpt4 key购买 nike

我正在尝试移植一个应用程序来驱动使用 ftdi2332h 芯片的设备从 Windows 到 Linux。我在 ubuntu 10.04 系统上安装了 libftd2xx 库 per these instructions .

当我尝试编译任何示例程序时,出现以下错误:

/usr/local/lib/libftd2xx.so: undefined reference to `memcpy@GLIBC_2.14'
collect2: ld returned 1 exit status

关于如何解决这个问题的任何指南?

最佳答案

mempcy@GLIBC_2.14 称为版本符号。 Glibc 使用它们,而其他运行时库,如 musl do not .

mempcy@GLIBC_2.14 在 Linux 上编译时的重要性是由于 Glibc 改变了 memcpy 在 2012 年的工作方式。 memcpy用于复制字节{开始→结束}(低内存地址到高内存地址)。 Glibc 2.13 提供了一个优化的 memcpy,可以在某些平台上复制 {end → begin}。我相信“某些平台”包括带有 SSE4.1 的英特尔机器。然后,Glibc 2.14 提供了一个 memcpy 来恢复 {begin → end} 行为。

一些程序依赖于 {begin → end} 拷贝。当程序使用重叠缓冲区时,memcpy 会产生未定义的行为。在这种情况下,程序应该使用 memmove,但由于发生了 {begin → end} 的复制,它们已经过去了。另见 Strange sound on mp3 flash website (由于 Adob​​e Flash),Glibc change exposing bugs (在 LWN 上),The memcpy vs memmove saga和 friend 。

要修复它,您可以将以下内容添加到您的源代码中:

__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");

也许像下面这样。然后在您的项目中包含额外的源文件。

$ cat version.c

__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");

关于c++ - 在 Linux 上编译时未定义对 mempcy@GLIBC_2.14 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286460/

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