Я хочу использовать библиотеку gloox C++ в моем C-коде (пакет easycwmp для openwrt).
Я компилирую с помощью openwrt toolschain gloox как пакет:
вот файл 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
#ifdef __cplusplus
его из.cpp файла, а не в.c файл.
#ifdef __cplusplus
extern "C"
#endif
GLOOX_API const char* gloox_version();
macros.h
?