前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >libphonenumber--windows上编译libphonenumber.lib以及使用(C++、VS2015)

libphonenumber--windows上编译libphonenumber.lib以及使用(C++、VS2015)

作者头像
程序员的酒和故事
发布于 2018-03-12 09:18:48
发布于 2018-03-12 09:18:48
2.6K00
代码可运行
举报
运行总次数:0
代码可运行

再介绍一个谷歌的,自带光环的库–libphonenumber.

虽然这个库是用c++写的,但是我们在网络上很少见到在C++开发中使用这个库,或是说在windows开发中使用这个库。也就是几乎很难找到如何编译libphonenumber.lib 和 libphonenumber.dll.

所以,今天就要与大家分享一下,如何编译libphonenumber.lib,以及简单的使用。

libphonenumber简介

phonenumber是用于解析、格式化、存储和校验电话号码的Java、C++或 JavaScript类库。

Google’s common Java, C++ and JavaScript library for parsing, formatting, and validating international phone numbers. The Java version is optimized for running on smartphones, and is used by the Android framework since 4.0 (Ice Cream Sandwich).

github地址: https://github.com/googlei18n/libphonenumber

准备工作

我们先进入cpp: https://github.com/googlei18n/libphonenumber/tree/master/cpp 看看这里的README,往下翻,你会感到很兴奋:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Building the library on Windows (Visual Studio)
-----------------------------------------------
The library was tested with Visual Studio 2010.You will need to manually fetch and install the following dependencies:
  - CMake (tested with v2.8.6):
    http://cmake.org/cmake/resources/software.html
    * Download and install the Win32 installer.

  - Boost (tested with v1.44) from BoostPro:
    http://www.boostpro.com/download/
    * Select all the variants and Boost DateTime and Boost Thread during the
      installation process.
    See Linux instructions for information about thread-safety.

  - GTest (tested with v1.6.0):
    http://code.google.com/p/googletest/downloads/list
    * Open msvc/gtest-md.sln with Visual Studio and build the whole solution.

  - ICU (MSVC binaries, tested with v4.8.1):
    http://site.icu-project.org/download/48#ICU4C-Download
    * Simply extract the archive.

  - Protocol Buffers:
    http://code.google.com/p/protobuf/downloads/list
    * Open vsprojects/protobuf.sln with Visual Studio and build the whole
      solution.

Then run cmake-gui and specify the path to the libphonenumber's cpp directory
and its build directory which must be created (e.g. cpp/build).

When clicking on "Configure", specify the appropriate Visual Studio version
(tested with 2010).

Then CMake will need your help to locate the dependencies. You will have to set
the following variables (this example assumes that you extracted the
dependencies to C:/).

GTEST_INCLUDE_DIR         C:/gtest-1.6.0/include
GTEST_LIB                 C:/gtest-1.6.0/msvc/gtest-md/Release/gtest.lib

ICU_I18N_INCLUDE_DIR      C:/icu/include
ICU_I18N_LIB              C:/icu/lib/icuin.lib

ICU_UC_INCLUDE_DIR        C:/icu/include
ICU_UC_LIB                C:/icu/lib/icuuc.lib

PROTOBUF_INCLUDE_DIR      C:/protobuf-2.4.1/src
PROTOBUF_LIB              C:/protobuf-2.4.1/vsprojects/Release/libprotobuf.lib
PROTOC_BIN                C:/protobuf-2.4.1/vsprojects/Release/protoc.exe

Then you can click on "Configure" again. CMake should have located all the
dependencies.
Then click on "Generate" to generate the appropriate Visual Studio project.
Then open cpp/build/libphonenumber.sln with Visual Studio and build the INSTALL
target.

As a result the library's headers and binaries should have been installed to
C:/Program Files/libphonenumber/.
Note that this path can be set by overriding the CMAKE_INSTALL_PREFIX variable
with cmake-gui.


Supported build parameters
--------------------------
  Build parameters can be specified invoking CMake with '-DKEY=VALUE' or using a
  CMake user interface (ccmake or cmake-gui).

  USE_ALTERNATE_FORMATS = ON | OFF [ON]  -- Use alternate formats for the phone
                                            number matcher.
  USE_BOOST             = ON | OFF [ON]  -- Use Boost. This is only needed in
                                            multi-threaded environments that
                                            are not Linux and Mac.
                                            Libphonenumber relies on Boost for
                                            non-POSIX (e.g. Windows)
                                            multi-threading.
  USE_ICU_REGEXP        = ON | OFF [ON]  -- Use ICU regexp engine.
  USE_LITE_METADATA     = ON | OFF [OFF] -- Generates smaller metadata that
                                            doesn't include example numbers.
  USE_RE2               = ON | OFF [OFF] -- Use RE2.
  USE_STD_MAP           = ON | OFF [OFF] -- Force the use of std::map.

1 cmake 对于cmake不太了解的同志,就跟我一样好了,下载一个cmake-gui https://cmake.org/

2 Boost 2.1下载 http://www.boost.org/

2.2解压 解压到C盘boost_1_62_0

2.3执行 执行bootstrap.bat

2.4执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 如果要获取动态库:bjam install stage --toolset=msvc-14.0 --stagedir="C:\Boost\boost_vc_140" link=shared runtime-link=shared threading=multi debug release  // 如果是要获取静态库:bjam install stage --toolset=msvc-14.0 --stagedir="C:\Boost\boost_vc_140" link=static runtime-link=static threading=multi debug release 

3 GTest 下载gtest,然后进入文件夹: D:\gtest\googletest\googletest\msvc

打开解决方案,就可以编译了。

4 ICU 这里的icu不是重症监护室,但是下载icu需要V**访问外国网站,你懂的。 下载地址: http://download.icu-project.org/files/icu4c/4.8.1.1/

这里注意,尽管你的windows电脑是64位,但是你开发的往往是32位程序,所以需要下载win23:

解压到C盘即可。

5 Protocol Buffers 这个就不用再说了,上一篇博客就是关于《google/protobuf–VS2015编译、使用》

准备工作齐活了,开始干大事。

生成libphonenumber解决方案

1 在cpp文件夹在新建一个文件夹,叫build。

2 打开cmake-gui,选择cpp文件夹作为source code, 选择build文件夹作为目标文件夹,然后添加一些变量,指向自己的路径即可:

这里需要注意的是,如果boost的错误太多,可以暂时把USE_BOOST去掉。

3 Configure 出现在这个,算是没毛病

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Could NOT find PkgConfig (missing:  PKG_CONFIG_EXECUTABLE) 
Configuring done

4 点击 Generate 在build文件夹下就会看到产生的.sln解决方案文件。

编译libphonenumber

打开解决方案,配置一些路径就可以了:

这里需要注意的是,可以由于各种原因,不能所有的build成功,主要确保phonenumber这个工程编译成功即可。

使用libphonenumber

终于搞定了,我们现在就使用一下这个牛逼的库吧。

1 新建一个win32控制台应用程序

2 加入头文件,包含目录

3 添加引用库

4 编写代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>#include<string>#include "phonenumber.h"#include "phonenumberutil.h"using i18n::phonenumbers::PhoneNumberUtil;using i18n::phonenumbers::PhoneNumber;int main()
{
  PhoneNumberUtil *phoneUtil = PhoneNumberUtil::GetInstance();  //初始化一个电话号码
  PhoneNumber *pn = new PhoneNumber();
  pn->set_country_code(86);
  pn->set_national_number(13478808311);  //判断电话号码是否有效
  std::cout  << std::boolalpha << phoneUtil->IsValidNumber(*pn) << std::endl;  //判断电话号码所在的地区
  std::string *region = new std::string();
  phoneUtil->GetRegionCodeForNumber(*pn, region);  std::cout << *region << std::endl;  std::string* name = new std::string();
  phoneUtil->GetNationalSignificantNumber(*pn, name);  std::cout << *name << std::endl;  //获取某个国家的国字区号
  PhoneNumber *example = new PhoneNumber();
  phoneUtil->GetInvalidExampleNumber("CN", example);  std::cout << example->country_code() << std::endl;  //释放内存
  delete pn;
  pn = nullptr;  delete region;
  region = nullptr;  delete name;
  name = nullptr;  delete example;
  example = nullptr;

  system("pause");  return 0;
}

输入结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
trueCN1347880831186

注意: 在生成库的时候,和我们编写自己的工程的时候,一定要选择一致的代码生成方式!!!!!!

结束: 大概就这样了,其实自己走的弯路、遇到的错误,比上面所写的多的多,但是很多都忘记了。 如果你遇到什么错误,可以给我留言,帮你解决,谢谢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人生有味是多巴胺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
cgal4.4+boost1.55+cmake2.86_MSVC90
CGAL_Boost_USE_STATIC_LIBS:BOOL=ON,这个默认是off,编译静态库,要修改,否则找不到
用户3519280
2023/07/08
2470
boost编译汇总
rem 编译64位boost rem 一直以来都是在Win32环境下Build和使用boost,但现在基本上每天都在64位Win7下工作, rem 所以很有必要把这几天的经验总结下来。和32位环境不同, rem x64环境下编译得先从开始菜单启动Visual Studio的Visual Studio 2008 x64 Win64 Command Prompt进入命令提示符, rem 而不是随便打开任意一个命令行窗口就行。然后转到boost根文件夹,运行bootstrap.bat生成x64版的bjam.exe。然后运行命令: rem bjam --build-type=complete toolset=msvc-9.0 threading=multi link=shared address-model=64 rem 即可生成DLL版平台库,如果要编译静态库版就把shared改为static。 rem 只生成一个库的话加上例如–with-python得编译选项,避免生成东西太多、时间太长。 rem 要有address-model=64属性,如果没有这个属性的话,会默认生成32位的平台库,加入这个选项才能生成64位的DLL。 rem 如果要生成Boost.Python库,需要先下载安装x64版的Python安装包,我用的版本是3.2.3。 rem 在使用这个库编写Python扩展DLL时,默认是使用动态库版的Boost.Python,要使用静态版的必须 rem 在C++项目中定义BOOST_PYTHON_STATIC_LIB宏,这样就不用在使用或发布扩展时带着boost_python-vc90-mt-1_50.dll一起了, rem 当然扩展DLL的尺寸会大些,如果做实验没必要这样,编译又慢生成的文件也大。 rem vs工具链版本:vs2003 : msvc-7.1,vs2005 : msvc-8.0,vs2008 : msvc-9.0,vs2010 : msvc-10.0
用户3519280
2023/07/06
2050
CGAL的编译以及在VS中的使用
CGAL的编译以及在VS中的使用 在被CGAL长久的折磨了两三周 在学习过程中有好几次库都出现了问题 所以打算重新更换一下版本 CGAL可以说是学习这么久以来见过最离谱(ex)的环境配置,期间出了好几次问题,主要各个配置关联性太强了 稍有一步有问题 编译就很容易报错 所以想记录一下配置过程
用户3519280
2023/07/08
6680
近期cmake-toolset的一些适配问题
偷懒了好久没有写分享了,最近的时间也是花费了很多时间大量优化了之前游戏服务器框架和组件的很多细节。其中,相对独立且同时也被其他的项目使用的一个工具则是基于 cmake 和 git 且兼容 vcpkg 的构建系统 cmake-toolset 。之所以要写这么个构建工具主要是要提供比 vcpkg 更宽容的兼容性(没办法我们公司的编译环境比较古老),并且提供更进一步的定制化能力(包含但不限于功能开关和下载源,这些东西 vcpkg 也是很后期才有了个初步的支持)。那么先来记录一下构建系统适配过程中的一些问题吧。
owent
2023/03/06
9600
单测:Google Test框架
Google Test是一个流行的C++单元测试框架,它提供了丰富的断言和测试工具,用于编写和运行单元测试。基于流行的 xUnit 架构
lealc
2024/03/22
8920
单测:Google Test框架
VS编译BOOST,bjam参数详解
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。
用户3519280
2023/07/08
5410
Windows10中使用VS2022和Cmake编译构建C++开源日志库-spdlog
Java中有很多日志库:java.util.logging、Log4j、Logback、Log4j2、slf4j、common-logging。C++的日志库相对来说就比较少了,比如说glog、log4cpp、spdllog等,目前个人感觉比较好用的C++开源日志库当属于spdlog了,跨平台,支持cmake编译,在维护中。 具体可以参考github上面的示例:https://github.com/gabime/spdlog 另外spdlog支持两种使用方式:一种是将源代码目录下的include头文件直接添加到自己的项目中使用;另一种使用cmake编译构建出lib静态库或者dll动态库之后以静态和动态链接方式使用。
ccf19881030
2022/11/21
3.2K0
Windows10中使用VS2022和Cmake编译构建C++开源日志库-spdlog
VS2015编译openjpeg(32/64位)
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/50581246
10km
2019/05/25
1.5K0
BTC-编译0.94版本
http://blog.csdn.net/zhangbohh8662/article/details/71439765
franket
2020/07/24
11.7K0
使用Cmake生成跨平台项目编译解决方案
    项目最近有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的代码结构和组织是分开的,因此为了两边能够同步维护,需要一个能够跨平台的项目编译解决方案,经过调研之后,选择了使用cmake这个工具,本文主要讲述,使用cmake的生产项目的一些基础知识。
帘卷西风
2018/08/03
5.5K0
使用Cmake生成跨平台项目编译解决方案
google/protobuf--VS2015编译、使用
本想用google的libphonenumber这个库来进行电话号相关功能,但是看到需要依赖protobuf,反正都是谷歌出品,那就顺便了解学习一下protobuf。 github地址: https://github.com/google/protobuf 什么是protobuf Protocol Buffers (a.k.a., protobuf) are Google’s language-neutral, platform-neutral, extensible mechanism for seri
程序员的酒和故事
2018/03/12
1.7K0
google/protobuf--VS2015编译、使用
linux下使用gtest框架进行c/c++测试-gmock环境搭建
google mock(以下简称gmock)也是google的开源项目,它能够在测试中起到“打桩”的作用。举个例子,有A模块需要调用B模块,需要对A模块进行测试,但是B模块没有实现,那么就可以利用gmock对B模块进行打桩,来模拟B接口的实现。本文主要介绍gmock环境的搭建,不涉及具体使用。
编程珠玑
2019/09/04
2.5K0
cmake:VS2015和GCC编译paho.mqtt C/C++ client
paho.mqtt.c是eclipse开发的C语言跨平台mqtt client 开源库,paho.mqtt.cpp是对应的C++ Client,paho.mqtt支持CMAKE编译,本文以脚本形式提供了使用CMAKE基于VS2015/Windows以及GCC/MinGW的编译过程。
10km
2021/11/15
1.7K0
Windows11环境编译leveldb
亲爱的读者朋友们,躺平区UP腆着脸来更新了,这半年时间经历了几次内心的仰卧起坐,最终还是彻底的躺了,这次挣扎着再次坐了起来,希望能给大家带来一点不一样的东西。好了,废话不多说了,Let's go !!!
麒思妙想
2023/01/13
1.1K0
Tensorflow c++实践(使用cmake vs2015 编译tensorflow源码)
写这篇文章的主要目的是为了总结这一个多月对tensorflow应用到c++语言上面走过的路。因为身边的人都少有使用c++实现tensorflow的使用,都是自己一点坑一点坑踩过来。所以想总结一番,也分享给大家一起探讨。第一次写,写的不好的地方请大家多多指正。我是在Github下载tensorflow源码,编译可以供vs2015使用的tensorflow库,然后将我们项目training得到的.ckpt文件固定成.pb文件,经过c++调用,跑出了想要做到的效果。这里介绍的是如何编译供c++使用的tensorflow库,并且是GPU版本。
李哥
2018/06/12
4.2K0
Tensorflow c++实践(使用cmake vs2015 编译tensorflow源码)
windows 10编译YOLOv4,包括exe和d
参考前文 windows 10安装CUDA和cuDNN,地址是:https://xugaoxiang.com/2019/12/18/windows-10-cuda-cudnn/, 这里不再赘述。
AI算法与图像处理
2021/04/21
1.5K0
windows 10编译YOLOv4,包括exe和d
log4cplus最新介绍、详细编译过程及使用(最全面)
log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统,受Apache Software License保护,作者是Tad E. Smith。
杨永贞
2022/09/22
4.6K1
log4cplus最新介绍、详细编译过程及使用(最全面)
Protobuf协议初探(1)
Protobuf源码下载网址:源码地址 本人使用了 3.10 版本的 Protobuf,源码地址:ProtobufV3.10
何其不顾四月天
2023/03/10
6810
Protobuf协议初探(1)
cmake:vs2015/MinGW静态编译leveldb
10km
2018/01/03
2.5K0
更新:Visual Studio配置C++的GDAL库
  本文介绍在Visual Studio软件中配置、编译C++环境下GDAL库、SQLite环境与PROJ库的详细方法。
疯狂学习GIS
2024/07/22
4660
更新:Visual Studio配置C++的GDAL库
相关推荐
cgal4.4+boost1.55+cmake2.86_MSVC90
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文