a library을 만들었고 데비안 패키지를 테스트하기위한 테스트 클라이언트를 만들려고합니다. 이 테스트는 Ubuntu 14.04에서 수행됩니다.clang에서는 컴파일되지만 gcc에서는 컴파일되지 않습니까?
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 -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
가 뭔가가 알고 있었다, 그래서 나는 그 소리와 같은 시도 :
나는 GCC를 사용하여 컴파일을 시도 잘
$ clang -Wall `pkg-config --cflags --libs cquel` `mysql_config --cflags --libs` -std=c11 main.c
연타를 컴파일! 내 a.out
바이너리를 실행하고 예상대로 열 머리글을 인쇄했습니다.
gcc가 내 라이브러리에 연결하지 못한 이유는 무엇입니까?
편집 : 내 LD_LIBRARY_PATH
을 확인하여 비어있는 것으로 확인했습니다. 그러나 /usr/lib/x86_64-linux-gnu
(내 공유 객체의 위치)으로 설정해도 gcc의 동작이 변경되지 않았습니다.
gcc 버전을 확인하십시오. 구식 일 수 있습니다. – drum