前一段时间我在Visual Studio项目中使用了libssh。到目前为止一切都很好。
现在我想在另一个项目Borland Cbuilder项目中使用该库。但是现在我遇到了很多编译错误。
我首先在标题中添加以下内容:
#include <libssh/libssh.h>
#include <libssh/sftp.h>
但这会产生以下错误:
[C++ Error] libssh.h(59): E2209 Unable to open include file 'unistd.h'
这是指unix文件,因此不好。 在libssh.h文件中,我看到以下代码:
#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 */
所以我尝试在头文件中包含以下行作为解决方法:
#define _MSC_VER 1
但后来又出现了另一个错误:
[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标头中的typedef包含到我自己的标头中。然后我得到下一个错误:
[C++ Error] sftp.h(50): E2238 Multiple declaration for 'uid_t'
来自sftp.h的以下部分:
#ifndef uid_t
typedef uint32_t uid_t;
#endif /* uid_t */
我大吃一惊....
BTW,我正在使用Borland C ++ builder 5.0。 (我知道这很古老)
答案 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内容复制到Borland部分,经过一些调整后编译完成。