0

我有一个跨平台的 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:“私有:静态无符号整数 const i18n::phonenumbers::PhoneNumberUtil::kMinLengthForNsn”(?kMinLengthForNsn@PhoneNumberUtil@phonenumbers@i18n@@0IB) 已在 LibPNWrapper.obj 中定义

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

静态常量 size_t kMinLengthForNsn = 2;

我知道通过将它包含在我的 cpp 中,它会再次声明。但是我试图:

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

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

我不确定是因为我混合了 C 和 C++ 还是我在这里遗漏了其他基本内容。

欢迎所有想法。

4

0 回答 0