参考memcpy@GLIBC_2.0返回未定义的引用

参考memcpy@GLIBC_2.0返回未定义的引用,c,centos,glibc,memcpy,linux-mint,C,Centos,Glibc,Memcpy,Linux Mint,我正在Linux Mint 17.2环境中开发一个工具,该工具将主要在CentOS 6.3中运行。这个工具由几个连续被python脚本调用的C程序组成 在测试此版本时,一个对象引用了GLIBC_2.14,这在CentOS 6.3中不可用。通过使用,我发现有问题的调用是GLIBC_2.14中引用的“memcpy”。在查看GLIBC的旧版本中是否有我可以链接的符号后,我发现GLIBC_2.0可以工作 然后我尝试将memcpy的呼叫与memcpy@GLIBC_2.0在源代码中使用asm调用,如上面链接

我正在Linux Mint 17.2环境中开发一个工具,该工具将主要在CentOS 6.3中运行。这个工具由几个连续被python脚本调用的C程序组成

在测试此版本时,一个对象引用了GLIBC_2.14,这在CentOS 6.3中不可用。通过使用,我发现有问题的调用是GLIBC_2.14中引用的“memcpy”。在查看GLIBC的旧版本中是否有我可以链接的符号后,我发现GLIBC_2.0可以工作

然后我尝试将memcpy的呼叫与memcpy@GLIBC_2.0在源代码中使用asm调用,如上面链接的解决方案中所建议的

__asm__(".symver memcpy,memcpy@GLIBC_2.0");
然而,在构建此文件时,我收到了一个未定义的引用memcpy@GLIBC_2.0


我对这种类型的发展相当陌生。有没有什么简单的东西我忽略了为什么这不起作用?

不要在Linux Mint 17.2上构建工具;改为在CentOS 6.3上构建它?(也要意识到CentOS 6.3已经过时,不受支持,并且在这一点上充满了安全缺陷。)这一点是正确的。在这种情况下,选择环境并不是我真正的决定,但你的评论可能是最好的主意。这应该是可能的(使用像那样的指令和链接器文件)为了充分具体地控制您使用的符号版本,但您可能需要花费更长的时间才能使其正常工作,则需要从头开始安装CentOS 6.3。也就是说,在CentOS 6.6系统上快速查看libc.so.6时,不会看到该版本的符号。我认为
GLIBC_2.2.5
是最古老的,但我没有看到带有该标记(或任何相关标记)的memcpy。关于
GLIBC_2.2.5
,你是对的,我应该链接到该库。它在一个案例中起了作用。然而,另一个二进制文件正在使用
memcpy
,尽管(我)没有调用它。无论我使用上面的链接方法,它都不会更正对
memcpy@GLIBC_2.14
。我又一次被困在这里了。你正在构建的二进制文件还是正在打包的二进制文件?不要在LinuxMint17.2上构建你的工具;改为在CentOS 6.3上构建它?(也要意识到CentOS 6.3已经过时,不受支持,并且在这一点上充满了安全缺陷。)这一点是正确的。在这种情况下,选择环境并不是我真正的决定,但你的评论可能是最好的主意。这应该是可能的(使用像那样的指令和链接器文件)为了充分具体地控制您使用的符号版本,但您可能需要花费更长的时间才能使其正常工作,则需要从头开始安装CentOS 6.3。也就是说,在CentOS 6.6系统上快速查看libc.so.6时,不会看到该版本的符号。我认为
GLIBC_2.2.5
是最古老的,但我没有看到带有该标记(或任何相关标记)的memcpy。关于
GLIBC_2.2.5
,你是对的,我应该链接到该库。它在一个案例中起了作用。然而,另一个二进制文件正在使用
memcpy
,尽管(我)没有调用它。无论我使用上面的链接方法,它都不会更正对
memcpy@GLIBC_2.14
。我又一次被困在这里了。你是在构建二进制文件还是在打包?