использовать метод c ++ в программе c

Я хочу использовать глокс библиотеки C ++ в моем коде C (пакет easycwmp для openwrt).

Я скомпилировал с openwrt toolschain глокс как пакет:

вот файл cpp gloox.cpp:

#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();
}

заголовочный файл gloox.h:

#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__

компиляция пакета Gloox в порядке
Когда я включаю gloox.h в мой C-код пакета easycwmp, я получаю эту ошибку:

staging_dir / target-i386_uClibc-0.9.33.2 / usr / include / gloox.h: 12: 8: ошибка: ожидаемый идентификатор или ‘(‘ перед строковой константой !!

Я компилирую libgloox с помощью команды:

make package/libgloox/compile

и затем я компилирую пакет easycwmp с помощью cmd:

make package/easycwmp/compile

Любая помощь приветствуется

0

Решение

extern «C» — это конструкция C ++, поэтому вам нужно защитить свой заголовок, чтобы его можно было использовать как из кода C, так и из C ++, например:

#ifdef __cplusplus
extern "C"{
#endif

GLOOX_API const char* gloox_version();

#ifdef __cplusplus
}
#endif

Также обратите внимание, что вам нужно ссылаться с помощью внешнего интерфейса C ++, даже если весь ваш код написан на C, поэтому используйте g ++ для компоновки вместо gcc.

2

Другие решения

Вы не можете использовать extern "C" в коде C (в том числе в файле .h, который используется из файла .c), только в коде C ++.

Вы должны окружить его #ifdef __cplusplus так что он активен только когда ты #include это из файла .cpp, а не из файла .c.

#ifdef __cplusplus
extern "C"#endif
GLOOX_API const char* gloox_version();
0

По вопросам рекламы [email protected]