我正在尝试将应用程序驱动使用 ftdi2332h 芯片的设备从 Windows 移植到 Linux。我在 ubuntu 10.04 系统上安装了 libftd2xx 库按照这些说明 http://www.ftdichip.com/Drivers/D2XX/Linux/ReadMe-linux.txt.
当我尝试编译任何示例程序时,出现以下错误:
/usr/local/lib/libftd2xx.so: undefined reference to `memcpy@GLIBC_2.14'
collect2: ld returned 1 exit status
有关如何解决此问题的任何指导方针?
The mempcy@GLIBC_2.14
称为版本化符号。 Glibc 使用它们,而其他运行时库如穆尔不 https://www.openwall.com/lists/musl/2015/05/10/1.
意义mempcy@GLIBC_2.14
在Linux上编译时是由于Glibc改变了方式memcpy
2012年回来工作。memcpy
用于复制字节{begin → end}(低内存地址到高内存地址)。 Glibc 2.13 提供了一个优化的memcpy
在某些平台上复制了 {end → begin} 。我相信“某些平台”包括具有 SSE4.1 的 Intel 机器。然后,Glibc 2.14 提供了memcpy
恢复了 {begin → end} 行为。
有些程序依赖于 {begin → end} 副本。当程序使用重叠缓冲区时memcpy
产生未定义的行为。在这种情况下,程序应该使用memmove
,但是由于发生了 {begin → end} 的副本,他们才过得去。另请参阅mp3 flash 网站上有奇怪的声音 https://bugzilla.redhat.com/show_bug.cgi?id=638477(由于 Adobe Flash),Glibc 更改暴露错误 https://lwn.net/Articles/414467/(在 LWN 上),memcpy 与 memmove 的传奇 https://www.win.tue.nl/~aeb/linux/misc/gcc-semibug.html和朋友。
要修复它,您似乎可以将以下内容添加到源代码中:
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
也许像下面这样。然后将额外的源文件包含在您的项目中。
$ cat version.c
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)