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

0

Я хочу использовать библиотеку 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 

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

  • 1
    Можете ли вы показать нам macros.h ?
  • 0
    Глядя на это, кажется, что вам нужно обернуть всю библиотеку gloox в оболочку C, если вы хотите ее использовать. Я думаю, что лучше написать «C-like» C ++, чем выполнять всю работу, необходимую для его обертывания.
Теги:
openwrt
gloox

2 ответа

2

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

#ifdef __cplusplus
    extern "C" 
    {
#endif

GLOOX_API const char* gloox_version();

#ifdef __cplusplus
    }
#endif

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

  • 0
    при компиляции main.c я получил ошибку по неопределенной ссылке на `gloox_version '
  • 0
    @Anis_Stack Тогда вы сделали что-то не так. Расскажите нам, что вы сделали: какие команды вы используете. Как вы создали свою библиотеку? Как вы связались в этой библиотеке?
Показать ещё 3 комментария
0

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

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

#ifdef __cplusplus
extern "C"
#endif
GLOOX_API const char* gloox_version();
  • 0
    при компиляции main.c я получил ошибку по неопределенной ссылке на `gloox_version '

Ещё вопросы

Сообщество Overcoder
Наверх
Меню