在尝试将共享库与Redhat Linux上的程序链接时,我看到了未定义的符号 我们运行的是Linux内核3.10.0,gcc 4.8.2和libc-2.17.so,以及libblkid 2.23.2
当我构建我正在编写的应用程序时,我从libblkid获取了两个未定义的符号:memcpy@GLIBC_2.14
和secure_getenv@GLIBC_2.17
。 (一个非常类似的构建在其他机器上工作,表面上使用相同版本的所有东西)。
注意,对于secure_getenv
,libblkid需要与libc库本身相同的版本。
查看libc-2.17.so中定义的符号,我找到memcpy@@GLIBC_2.14
,memcpy@GLIBC_2.2.5
,secure_getenv
和secure_getenv@GLIBC_2.2.5
。根据我的理解,第一个@
版本中的双memcpy
只是将其标记为默认版本。而且,由于某些原因,即使在带有版本化符号的libc中,第一个secure_getenv
似乎也是无版本的。
那么,为什么memcpy@GLIBC_2.14
的要求与默认的memcpy@@GLIBC_2.14
不匹配?
从逻辑上讲,我希望libc-2.17中的基本版secure_getenv
能够满足2.17版的要求。
那么,这里发生了什么?是什么让我的开发机器失败而不是其他?我该如何解决? (由于make在其他机器上工作,这似乎是我的构建环境特有的,但是什么?)
答案 0 :(得分:0)
您可能已安装compat-glibc
,如-L/usr/lib/x86_64-redhat-linux6E/lib64
参数所示。 Red Hat Enterprise Linux 7上的compat-glibc
仅提供glibc 2.12,因此不能用于链接系统库。