Gsoap文件已停留@

时间:2015-12-13 19:56:43

标签: c++ c gcc gsoap wsse

我正在使用g ++与g ++和qmake编译程序。经过几个小时的努力,我从编译器得到了这个错误:

/usr/share/gsoap/import/ds.h:89:2: error: stray ‘@’ in program
  @char*     Id;
  ^

看一下/usr/share/gsoap/import中的文件,我可以看到很多@

wsse.h的一部分:

/// Element "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd":Reference of complexType "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd":ReferenceType.
/// @brief This element defines a security token reference
/// Imported element _wsse__Reference from typemap WS/WS-typemap.dat.
typedef struct _wsse__Reference
{   @char*                  URI;
    @char*                  ValueType;
} _wsse__Reference;

我无法理解代码中的@是什么,我认为在c ++中没有这样的东西。

有人帮忙吗?!感谢。

修改 还有其他奇怪的东西。另一个编译错误是:

/usr/share/gsoap/import/ds.h:289: error: expected ';' at end of member declaration
     char* /*base64*/                     PgenCounter                    1; ///< Required element.
                                          ^

看一下源文件,结构定义中有很多这样的东西:

/// "http://www.w3.org/2000/09/xmldsig#":DSAKeyValueType is a complexType.
struct ds__DSAKeyValueType
{
/// Element G of type "http://www.w3.org/2000/09/xmldsig#":CryptoBinary.
    char* /*base64*/                     G                              0;  ///< Optional element.
/// Element Y of type "http://www.w3.org/2000/09/xmldsig#":CryptoBinary.
    char* /*base64*/                     Y                              1;  ///< Required element.
/// Element J of type "http://www.w3.org/2000/09/xmldsig#":CryptoBinary.
    char* /*base64*/                     J                              0;  ///< Optional element.
/// Element P of type "http://www.w3.org/2000/09/xmldsig#":CryptoBinary.
    char* /*base64*/                     P                              1;  ///< Required element.
/// Element Q of type "http://www.w3.org/2000/09/xmldsig#":CryptoBinary.
    char* /*base64*/                     Q                              1;  ///< Required element.
/// Element Seed of type "http://www.w3.org/2000/09/xmldsig#":CryptoBinary.
    char* /*base64*/                     Seed                           1;  ///< Required element.
/// Element PgenCounter of type "http://www.w3.org/2000/09/xmldsig#":CryptoBinary.
    char* /*base64*/                     PgenCounter                    1;  ///< Required element.
};

我不知道如何解释属性名称后的数字。

答案摘要:

正如mpromonet所提到的,/usr/share/gsoup/import中的ds.hwsse.h中的文件不是C / C ++代码,不应使用C / C ++编译器进行编译。从标题中的注释可以理解:

  

生成:wsdl2h -cuxy -o ds.h -t WS / WS-typemap.dat WS / ds.xsd

相反,他们应该像gsoap一样交给soapcpp2这样的工具:

soapcpp2 -I/usr/share/gsoap/import /usr/share/gsoap/import/ds.h

问题在于我已经使用soapcpp2编译了另一个名为onvif.h的文件,该工具无法一起处理两个文件。然后(再次感谢mpromonent)结果是导入原始文件wsse.h中的第二个文件onvif.h可以解决问题。换句话说,将以下行添加到onvif.h

#import "wsse.h"

起初看来网络上没有太多信息给我,但在meanfile中,我发现这个指南非常有帮助:

http://www.genivia.com/dev.html

1 个答案:

答案 0 :(得分:1)

/usr/share/gsoap/import/ds.h文件由wsdl2h生成。在评论中你应该看到类似的东西:

Generated with:
wsdl2h -cuxy -o ds.h -t WS/WS-typemap.dat WS/ds.xsd

这不是C / C ++包含,它应该由gSOAP工具soapcpp2处理:

soapcpp2 -I/usr/share/gsoap/import /usr/share/gsoap/import/ds.h 

这将生成您应该与项目一起编译的包含和源文件。

要使用wsse插件,您应该附加到使用wsdl2h生成的文件中:

#import "wsse.h"