2014-11-07 2 views
0

C 코드 (openwrt 용 easycwmp 패키지)에서 C++ 라이브러리 gloox를 사용하고 싶습니다. 여기C 프로그램에서 C++ 메소드 사용

cpp가 파일 gloox.cpp됩니다 :

#include "gloox.h" 
namespace gloox 
{ 
    const std::string XMPP_STREAM_VERSION_MAJOR = "1"; 
    const std::string XMPP_STREAM_VERSION_MINOR = "0"; 
    const std::string GLOOX_VERSION   = "1.0.11"; 
    const std::string GLOOX_CAPS_NODE   = "http://camaya.net/gloox"; 
} 
extern "C" const char* gloox_version() 
{ 
    return gloox::GLOOX_VERSION.c_str(); 
} 

헤더 파일 gloox.h :

#ifndef GLOOX_H__ 
#define GLOOX_H__ 

#include "macros.h" 


extern "C" //--> error: expected identifier or '(' before string constant 
{ 
    GLOOX_API const char* gloox_version(); 
} 

#endif // GLOOX_H__ 

컴파일

나는 패키지와 gloox toolschain openwrt 컴파일 gloox 패키지는 gloox.h를 easycwmp 패키지의 C 코드에 포함시킬 때 OK입니다.이 오류가 발생합니다.

staging_dir/target-i386_uClibc-0.9.33.2/usr/include/gloox.h : 12 : 8 : 오류 : 예상 식별자 또는 '('앞에 문자열 상수 !!

make package/libgloox/compile 

을하고 난 cmd를 함께 패키지를 easycwmp 컴파일 :

나는 명령을 libgloox 컴파일 어떤 도움이

+1

'macros.h '를 보여줄 수 있습니까? – Sean

+0

그것을보고, 그것을 사용하려는 경우 전체 래퍼 라이브러리를 C 래퍼로 포장해야합니다. 나는 그것을 감싸는 데 필요한 모든 일을하는 것보다 "C와 같은"C++로 작성하는 것이 더 좋은 생각이라고 생각한다. – molbdnilo

답변

0

을 감사

make package/easycwmp/compile 

당신은 C 코드에서 extern "C"을 사용할 수 없습니다 (.c 파일에서 사용되는 .h 파일 포함), C++ 코드에서만 사용할 수 있습니다.

#ifdef __cplusplus으로 둘러 쌀 필요가 있으므로 .cpp 파일이 아닌 .cpp 파일에서만 #include 일 때만 활성화됩니다. 당신이 C와 C++ 코드 때문에 등으로 사용할 수 있도록 헤더를 보호 할 수 있도록

#ifdef __cplusplus 
extern "C" 
#endif 
GLOOX_API const char* gloox_version(); 
+0

main.c 컴파일시'gloox_version '에 대한 정의되지 않은 참조가 있습니다. –

2

통근 "C"는 구성 ++은 C입니다 :

#ifdef __cplusplus 
    extern "C" 
    { 
#endif 

GLOOX_API const char* gloox_version(); 

#ifdef __cplusplus 
    } 
#endif 

을 또한 당신이 필요 있습니다 모든 코드가 C 인 경우에도 C++ 프론트 엔드를 사용하여 링크하므로 gcc 대신 g ++을 사용하여 링크하십시오.

+0

main.c 컴파일시'gloox_version'에 대한 정의되지 않은 참조가 있습니다. –

+0

@Anis_Stack 그런데 뭔가 잘못되었습니다. 당신이 한 일을 말해주십시오 : 어떤 명령을 실행하고 있습니까? 어떻게 도서관을 만들었습니까? 어떻게 그 도서관에 링크 했습니까? – nos

+0

openwrt 툴체인 "toolchain-i386_gcc-4.6-linaro_uClibc-0.9.33.2"와 "--mode = link i486-openwrt-linux-uclibc-g ++"로 goolx 라이브러리를 컴파일합니다. 컴파일이 끝나면 gloox.h를 C 프로그램에 포함합니다. –

관련 문제