我必须为GNU libc扩展tdestroy链接哪个库

时间:2019-02-09 18:06:34

标签: gnu glibc libc

我正在尝试将我编译的C程序与gcc编译器链接。链接器找不到符号@Test(expected = IllegalStateException.class) public void testPutThrowsIllegalStateException1() { llmm.put("A", null); llmm.put(null, 1); llmm.put(null, null); ,它是libc的gnu扩展名(tdestroy后跟#define __USE_GNU)。是否有一个我必须链接的附加库才能使链接程序找到该符号?

〜Update〜:我刚刚意识到它确实可以在我的Linux环境上链接,但是在Windows上,即使使用#include <search.h>而不是{{ 1}}。

2 个答案:

答案 0 :(得分:2)

请勿使用__USE_GNU。那是一个内部GLIBc宏。 tdestroy man page说出您需要的宏 开头定义为_GNU_SOURCE

#define _GNU_SOURCE
#include <search.h>
void *td = tdestroy;
int main(){}

编译时没有链接器错误(不需要额外的库)。

答案 1 :(得分:2)

您永远不要定义__USE_GNU(原文如此),它是一个内部符号。您需要定义_GNU_SOURCE,请参见Feature Test Macros

如果这样做,tdestroy功能将可用。

使用-Werror=implicit-function-declaration进行构建也是一个好主意,这样,缺少原型会导致编译器失败,而不会导致链接器失败。