尽管符号存在,但CMake中的符号查找失败

3

我正在尝试使用CMake检查符号getaddrinfo_a是否存在:

list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
check_symbol_exists(getaddrinfo_a netdb.h HAVE_GETADDRINFO_A)
list(REMOVE_ITEM CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)

尽管在 netdb.h 中定义了 getaddrinfo_a 函数(假设已定义 _GNU_SOURCE),但 CMake 无法找到它。
-- Looking for getaddrinfo_a
-- Looking for getaddrinfo_a - not found.

你知道我做错了什么吗?



嗯,也许你需要设置 CMAKE_REQUIRED_INCLUDES - arrowd
netdb.h在标准包含路径(/usr/include)上。在该路径下查找其他符号可以正常工作,因此我猜测问题不在于包含路径。 - Martin Sustrik
1个回答

5
根据getaddrinfo_a手册,该函数在链接时需要libanl库。尝试在调用check_symbol_exists之前设置CMAKE_REQUIRED_LIBRARIES
list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
list(APPEND CMAKE_REQUIRED_LIBRARIES anl)
check_symbol_exists(getaddrinfo netdb.h HAVE_GETADDRINFO_A)

小细节:在check_symbol_exists中,getaddrinfo应该改为getaddrinfo_a - gfoidl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接