我有一个跨平台的 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++ 还是我在这里遗漏了其他基本内容。
欢迎所有想法。