首先感谢您的关注和帮助。
我一直在尝试./configure
并构建一个使用大量库,特别是libudns的程序。我一直在安装几个需要的库,或者通过apt-get或者编译,所有这些库都可以工作,但是libudns(这让我很害怕)。
此程序使用 configure 脚本,该脚本包含以下行代码,用于将标记-ludns
添加到 Makefile :
if [ "x$WITH_UDNS" == "xy" ]; then
mkl_lib_check "udns" HAVE_UDNS fail CC "-ludns" \
"#include <udns.h>
void *f();void *f(){return dns_init;}"
fi
当我键入./configure
时,脚本会通过 pkg-config 和编译检查系统中是否存在所有库,正如您在跟随快照:
如您所见,configure无法看到此库。
我所做的是尝试通过两种不同的方式安装此软件包:
通过pkg-config:sudo apt-get install libudns-dev
通过编译:
git clone https://github.com/shadowsocks/libudns
cd libudns
./autogen.sh
./configure && make
sudo make install
通过这两种方式,我同时拥有:
/usr/lib/x86_64-linux-gnu/libudns.so
/usr/local/include/udns.h
这些路径与安装其他库的路径相同,例如PostgreSQL,您可以检测到它:
/usr/lib/x86_64-linux-gnu/libpq.so
/usr/include/postgresql/libpq-fe.h
但结果总是一样的:
有人知道如何链接这个库吗?
另外,我还尝试了其他一些事情:
将udns.h复制到/ usr / include:sudo cp /usr/local/include/udns.h /usr/include/udns.h
仅制作示例程序以模拟此检查:
#include <stdio.h>
#include <udns.h>
struct dns_ctx* ctx;
void *f();
void * f(){return dns_init;}
int main(int argc, char** argv){
int do_open = 0;
printf("Hola, mundo\n");
f(ctx, do_open);
}
当我尝试用以下代码构建此程序时:
gcc main.c -o hello_world -ludns
WORKS !?!
我还尝试在没有 -ludns 标志的情况下构建此程序,它给我的错误与以前相同:
所以,我不明白失败的地方,考虑到你可以在第二张图片中看到, -ludns 标志存在。
非常感谢你的时间。任何建议都会受到欢迎。