2011-12-12 3 views
1

C++ 클래스의 Gnutls 예제를 GnuTLS Doc에서 통합하려고합니다. g ++와 링크하는 동안 Unfortunatly 정의되지 않은 참조를 throw합니다. 그래서 나는 g ++로 변경하지 않고 (순수한 C 언어로) 예제를 컴파일하려고 시도했지만 성공하지는 못했다. gcc를 사용하면 작동합니다.C++ 프로젝트에서 C gnutls API를 사용하는 방법

[email protected]:~/Code/tlstests$ gcc tlsclient.c -lgnutls 
/tmp/ccBqJdQr.o: In function `main': 
tlsclient.c:(.text+0x3d0): undefined reference to `tcp_connect' 
tlsclient.c:(.text+0x58d): undefined reference to `tcp_close' 
collect2: ld returned 1 exit status 
[email protected]:~/Code/tlstests$ g++ tlsclient.c -lgnutls 
/tmp/ccRq5DcT.o: In function `load_keys()': 
tlsclient.c:(.text+0x186): undefined reference to gnutls_pcert_import_x509_raw(gnutls_pcert_st*, gnutls_datum_t const*, gnutls_x509_crt_fmt_t, unsigned int)' 
tlsclient.c:(.text+0x299): undefined reference to gnutls_privkey_init(gnutls_privkey_st**)' 
tlsclient.c:(.text+0x2b5): undefined reference to `gnutls_privkey_import_x509(gnutls_privkey_st*, gnutls_x509_privkey_int*, unsigned int)' 
/tmp/ccRq5DcT.o: In function `main': 
tlsclient.c:(.text+0x37e): undefined reference to `gnutls_certificate_set_retrieve_function2(gnutls_certificate_credentials_st*, int (*)(gnutls_session_int*, gnutls_datum_t const*, int, gnutls_pk_algorithm_t const*, int, gnutls_pcert_st**, unsigned int*, gnutls_privkey_st**))' 
tlsclient.c:(.text+0x3d6): undefined reference to `tcp_connect()' 
tlsclient.c:(.text+0x594): undefined reference to `tcp_close(int)' 
collect2: ld returned 1 exit status 

gnutls/abstract.h에 선언 된 함수 만 C++ 컴파일러를 사용하여 정의되지 않은 것을 볼 수 있습니다. (tcp_connect() 및 tcp_close()에 대한 정의되지 않은 참조는 무시되고 extern으로 선언됩니다.)

나는 C++ 클래스 및 템플릿을 더 좋습니까? 그래서 나는 상상할 수 없다. 왜 나는이 오류들을 가지고 있느냐.

누구나 전에 이런 걸 봤어?

답변

6

블록을 extern "C" {} 블록으로 감 쌉니다. gnutls/abstract.h이 C++ 헤더에 포함 된 것 같습니다.

+0

감사합니다, 그것은 :-) 작동 –

관련 문제