use*_*551 10 c++ porting undefined-reference ftdi
我试图移植一个应用程序来驱动一个使用ftdi2332h芯片的设备从Windows到Linux.我按照这些说明在ubuntu 10.04系统上安装了libftd2xx库.
当我尝试编译任何示例程序时,我收到以下错误:
/usr/local/lib/libftd2xx.so: undefined reference to `memcpy@GLIBC_2.14'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
有关如何解决这个问题的指导原则?
在mempcy@GLIBC_2.14被称为版本符号。Glibc使用它们,而musl等其他运行时库则不使用它们。
mempcy@GLIBC_2.14在Linux 上进行编译的重要性是由于Glibc memcpy在2012年更改了工作方式memcpy。end}(从低内存地址到高内存地址)。Glibc 2.13提供了一个优化的memcpy复制{end?在某些平台上开始}。我相信“某些平台”包括带有SSE4.1的英特尔机器。然后,Glibc 2.14提供了一个memcpy还原{开始?结束}行为。
有些程序依赖于{开始?结束}副本。当程序使用重叠缓冲区时,则会memcpy产生未定义的行为。在这种情况下,本应使用一个程序memmove,但由于出现了复制,所以它们无法通过{ 结束}。另请参阅mp3 Flash网站上的奇怪声音(由于Adobe Flash),Glibc更改暴露的错误(在LWN上),memcpy vs memmove传奇和朋友。
要修复它,您可以在源代码中添加以下内容:
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
Run Code Online (Sandbox Code Playgroud)
也许像下面这样。然后在项目中包含额外的源文件。
$ cat version.c
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24898 次 |
| 最近记录: |