首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c程序中使用c++方法

在c程序中使用c++方法
EN

Stack Overflow用户
提问于 2014-11-07 18:23:18
回答 2查看 309关注 0票数 0

我想在我的C代码中使用C++库gloox (用于openwrt的easycwmp包)。

我用openwrt工具在gloox as包中编译:

下面是cpp文件gloox.cpp:

代码语言:javascript
复制
#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();
}

头文件glox.h:

代码语言:javascript
复制
#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__

当我在easycwmp包的C代码中包含glox.h时,gloox包的编译是正常的,我得到了这个错误:

staging_dir/target-i386_uClibc-0.9.33.2/usr/include/gloox.h:12:8:错误:字符串常量前应为标识符或'(‘!!

我使用以下命令编译libgloox:

代码语言:javascript
复制
make package/libgloox/compile 

然后我用cmd编译easycwmp包:

代码语言:javascript
复制
make package/easycwmp/compile 

任何帮助我们都将不胜感激

EN

回答 2

Stack Overflow用户

发布于 2014-11-07 18:33:20

外部"C“是一个C++构造,所以你需要保护你的头,这样它就可以在C和C++代码中使用,如下所示:

代码语言:javascript
复制
#ifdef __cplusplus
    extern "C" 
    {
#endif

GLOOX_API const char* gloox_version();

#ifdef __cplusplus
    }
#endif

另请注意,您需要使用C++前端进行链接,即使您所有的代码都是C语言,因此使用g++而不是gcc进行链接。

票数 2
EN

Stack Overflow用户

发布于 2014-11-07 18:31:51

不能在C代码中使用extern "C" (包括在从.c文件中使用的.h文件中),只能在C++代码中使用。

您需要使用#ifdef __cplusplus将其包围,以便仅当您从.cpp文件(而不是.c文件)对其执行#include操作时,它才处于活动状态。

代码语言:javascript
复制
#ifdef __cplusplus
extern "C"
#endif
GLOOX_API const char* gloox_version();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26799027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档