Я хочу использовать глокс библиотеки 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
Любая помощь приветствуется
extern «C» — это конструкция C ++, поэтому вам нужно защитить свой заголовок, чтобы его можно было использовать как из кода C, так и из C ++, например:
#ifdef __cplusplus
extern "C"{
#endif
GLOOX_API const char* gloox_version();
#ifdef __cplusplus
}
#endif
Также обратите внимание, что вам нужно ссылаться с помощью внешнего интерфейса C ++, даже если весь ваш код написан на C, поэтому используйте g ++ для компоновки вместо gcc.
Вы не можете использовать extern "C"
в коде C (в том числе в файле .h, который используется из файла .c), только в коде C ++.
Вы должны окружить его #ifdef __cplusplus
так что он активен только когда ты #include
это из файла .cpp, а не из файла .c.
#ifdef __cplusplus
extern "C"#endif
GLOOX_API const char* gloox_version();