我正在尝试将我编译的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}}。
答案 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
进行构建也是一个好主意,这样,缺少原型会导致编译器失败,而不会导致链接器失败。