LNK2005为C ++ libphonenumber制作C包装器

时间:2015-05-06 15:06:24

标签: c++ c visual-studio libphonenumber lnk2005

我有一个跨平台的C项目,现在我想在我的项目中引入基于C ++的libphonenumber,尽可能少地改变。第一次尝试是使用Visual Studio 2013将它集成到Win32中,但它需要在iOS和Android上运行。

所以我创建了这个标题:

    #ifndef LIB_PN_WRAPPER_H
    #define LIB_PN_WRAPPER_H

      #ifdef __cplusplus
        extern "C" {
      #endif

      char* tu_lpn_normalize(char* number);

      #ifdef __cplusplus
        }
      #endif
    #endif //LIB_PN_WRAPPER

和这个cpp:

    #include "LibPNWrapper.h"
    #include "phonenumbers/phonenumberutil.h"

    using i18n::phonenumbers::PhoneNumberUtil;

    char* tu_lpn_normalize(char* number) {
      PhoneNumberUtil* util = PhoneNumberUtil::GetInstance();
      return "hello";
    }

但是我遇到了这个链接器错误:

错误LNK2005:已在LibPNWrapper.obj中定义的“private:static unsigned int const i18n :: phonenumbers :: PhoneNumberUtil :: kMinLengthForNsn”(?kMinLengthForNsn @ PhoneNumberUtil @ phonenumbers @ i18n @@ 0IB)

这确实在phonenumberutil.h中声明和定义为:

static const size_t kMinLengthForNsn = 2;

我理解通过将它包含在我的cpp中它再次被声明。但是我试过:

  • 将其包含在头文件中,但之后我不得不将我的文件更改为c ++编译,而我仍然遇到问题。

  • 要在cpp文件中使用命名空间,但它没有帮助。

我不确定它是否因为我混合了C和C ++,或者我在这里缺少其他基本的东西。

欢迎所有想法。

0 个答案:

没有答案