2014-11-25 2 views
0

a library을 만들었고 데비안 패키지를 테스트하기위한 테스트 클라이언트를 만들려고합니다. 이 테스트는 Ubuntu 14.04에서 수행됩니다.clang에서는 컴파일되지만 gcc에서는 컴파일되지 않습니까?

the binarythe 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의 동작이 변경되지 않았습니다.

+0

gcc 버전을 확인하십시오. 구식 일 수 있습니다. – drum

답변

3

arguments의 순서는 gcc에 많이 씁니다. 당신은

gcc -Wall $(pkg-config --cflags cquel) $(mysql_config --cflags) \ 
     -std=c11 main.c \ 
     $(pkg-config --libs cquel) $(mysql_config --libs) 

this & that 참조 사용해야합니다.

+0

이것은 효과가 있습니다. 나는 gcc가 인수에 대해 까다 롭다 고 생각했지만, 나는 항상 소스 파일을 마지막으로 가져 가야한다고 생각했다. 'gcc -Wall -std = c11 main.c \'mysql_config --libs --cflags \'\'pkg-config --libs --cflags cquel \'' – 2mac

+2

(gcc 포함), 링크 할 때 라이브러리는 오브젝트 파일 다음에 나열되어야합니다 – user3629249

관련 문제