如何在Borland Cbuilder项目中使用libssh?

时间:2017-11-15 08:39:54

标签: c++builder borland-c++ libssh

前一段时间我在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。 (我知道这很古老)

1 个答案:

答案 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部分,经过一些调整后编译完成。