我做了a library,我试图让它成为测试客户端来测试我的Debian软件包。此测试正在Ubuntu 14.04上完成。
我安装了the binary和the developer files及其依赖项。
这是我测试计划的来源:
#include <stdio.h>
#include <cquel.h>
int main(int argc, char *argv[])
{
cq_init(1024, 128);
struct dbconn mydb = cq_new_connection(u8"pattstest.delwink.com", u8"patts",
u8"patts", u8"pattsdb");
struct dlist *users;
int rc = cq_select_all(mydb, u8"User", &users, u8"");
if (rc)
return 2;
for (size_t i = 0; i < users->fieldc; ++i)
printf("%s\n", users->fieldnames[i]);
cq_free_dlist(users);
return 0;
}
程序应该连接到测试服务器并从数据库中获取列标题(不,该服务器不是生产服务器,不需要特别安全)。
我尝试使用gcc编译:
$ gcc -Wall `pkg-config --cflags --libs cquel` `mysql_config --cflags --libs` -std=c11 main.c
/tmp/ccjd21kP.o: In function `main':
/home/mac/c/main.c:6: undefined reference to `cq_init'
/home/mac/c/main.c:8: undefined reference to `cq_new_connection'
/home/mac/c/main.c:12: undefined reference to `cq_select_all'
/home/mac/c/main.c:19: undefined reference to `cq_free_dlist'
collect2: error: ld returned 1 exit status
我知道有些事情发生了,所以我尝试用clang做同样的事情:
$ clang -Wall `pkg-config --cflags --libs cquel` `mysql_config --cflags --libs` -std=c11 main.c
Clang编译得很好!我运行了a.out
二进制文件,它按预期打印了列标题。
为什么gcc无法链接到我的库?
编辑:我想检查我的LD_LIBRARY_PATH
,发现它是空白的。但是,将其设置为/usr/lib/x86_64-linux-gnu
(这是我的共享对象的位置)并没有改变gcc的行为。