2017-11-15 1 views
0

는 얼마 전에 저는 비주얼 스튜디오 프로젝트에 libssh을 사용했다. 여태까지는 그런대로 잘됐다.Borland Cbuilder 프로젝트에서 libssh를 사용하는 방법은 무엇입니까?

는 지금은 다른 프로젝트, 볼랜드 Cbuilder 프로젝트에 해당 라이브러리를 사용하고 싶습니다. 하지만 이제는 많은 컴파일러 오류가 발생합니다.

#include <libssh/libssh.h> 
#include <libssh/sftp.h> 

을하지만 이것은 다음과 같은 오류를 제공합니다 :

내가 다음 퍼팅에 의해 시작 헤더에 포함하는 좋은되지 않도록

[C++ Error] libssh.h(59): E2209 Unable to open include file 'unistd.h' 

이, 유닉스 파일을 참조. 나는 다음과 같은 코드를 볼 수 libssh.h 파일에서 는 :

#define _MSC_VER 1 

그러나 나는 또 다른 오류가 발생합니다 :

#ifdef _MSC_VER 
    /* Visual Studio hasn't inttypes.h so it doesn't know uint32_t */ 
    typedef int int32_t; 
    typedef unsigned int uint32_t; 
    typedef unsigned short uint16_t; 
    typedef unsigned char uint8_t; 
    typedef unsigned long uint64_t; 
    typedef int mode_t; 
#else /* _MSC_VER */ 
    #include <unistd.h> 
    #include <inttypes.h> 
#endif /* _MSC_VER */ 

그래서 해결 방법으로 내 헤더 파일에 다음 줄을 포함하도록 시도했다 :

[C++ Error] types.h(47): E2238 Multiple declaration for 'mode_t' 
[C++ Error] libssh.h(57): E2344 Earlier declaration of 'mode_t' 

짧은 이야기 : 필자가 시도한 다음 해결 방법은 항상 컴파일 오류가 발생합니다.

이 고정 될 수 있는가? 또는 libssh는 Microsoft 컴파일러에서만 사용할 수 있습니까?

[편집 :] 내가 다른 일을 시도 : 내 자신의 헤더에 libbssh 헤더의 형식 정의를 포함한다. sftp.h에서 다음 작품에 대한

[C++ Error] sftp.h(50): E2238 Multiple declaration for 'uid_t' 

: 그리고 난 다음 오류 얻을

#ifndef uid_t 
    typedef uint32_t uid_t; 
#endif /* uid_t */ 

나는 깜짝 놀라게하고 있습니다 .... BTW

을, 나는 볼랜드 C를 사용하고 있습니다 ++ 빌더 5.0. 결국 나는 다음과 같은 방법으로 헤더 파일을 고정

답변

0

음 (나는 그것이 고대 알고) :

#ifdef _MSC_VER 
    // Do MSVC specific stuff 
#else 
#ifdef __BCPLUSPLUS__ 
    // Do Borland specific stuff 
#else /* __BCPLUSPLUS__ */ 
    // Do unix stuff 
#endif /* __BCPLUSPLUS__ */ 
#endif /* _MSC_VER */ 

나는 볼랜드 섹션으로 컴파일을 조정 일부 후 MSVC 물건을 복사.

+0

사용하는 대신'__BCPLUSPLUS__'의'__BORLANDC__', 그리고'정의 #elif (...)'대신'#else #의 ifdef'. 벤처 캐피탈 ++과 볼랜드 섹션 동일한 코드를 사용하는 경우에, 정의 (_MSC_VER) # 만약'사용하여 함께 병합 || 별개의'# ifdef' 대신에 정의 된 (__ BORLANDC __)' –

관련 문제