Posted on 21-08-2014
Filed Under (技术) by waterlin

最近在 PC 上需要生成一个二维码图片,准备使用 libqrencode 这个 QR 二维码生成库。Windows 下有一个它的移植版本 qrencode-win32,除了有源代码以外,还有一个 Windows 下的应用程序,可以直接用来生成 QR 二维码。

我使用的是 libqrencode 3.4.2 版本,对应于 Windows 下的版本是使用 VC8 来构建工程的,而我本地只有 VC9 的版本,我升级工程后进行编译,提示如下错误:

这是因为在 VC9 CRT 里已经定义了 vsnprintf 这个函数,而在 VC8 里却没有,所以在很多 VC8 或更早的代码里,会添加类似下面的定义:

对于 libqrencode 来说,也是这个问题,只需要把 config.h 里的这一句代码注释掉即可。

如果还需要在 VC8 和 VC9 里使用,则可以使用下面的方式来灵活定制:

(0) Comments    Read More   
Posted on 20-08-2014
Filed Under (技术) by waterlin

Visual C++ 2008 SP1 compiler error C1859

有一些工程,在编译好后再重新编译,会提示类似如下错误(Windows7下容易出现):

这个就是 Visual C++ 2008 SP1 compiler error C1859 的问题,解决办法就是安装一个补丁包

除了安装上述安装包以后,还可以使用如下方式来修复该问题:

  • Disable /analyze (if enabled).
  • Invoke a clean build.
  • Reboot your machine.
  • Disable PCH files.

使用 std::copy 时的 C4996 警告

Visual C++ 2008 里如果把警告当成错误处理时进行编译,下面这个警告就会被当成错误,很扎眼,而你,则一定需要解决这个问题。

这是在使用 Visual C++ 自带的标准库时,Visual C++ 的编译器会加强检查,标准库里的一些方法会认为在使用上是不安全的。Visual C++ 对此提出警告、不建议使用这些函数,并且 Windows 提供了一些其它以 _s 结尾的函数用来替代这些方法。std::copy 就是这个现象的重灾区。

如果是你自己的代码碰到这个问题,那很好解决,你只需要把这些函数替换成 Windows 提供的更安全的函数即可。但是,如果是你引用的第三方库的代码问题,而你又在 Visual Studio 里把安全级别设置成不允许有警告,这个时候,就只能通过定义一个 _SCL_SECURE_NO_WARNINGS 宏来解决此问题。

(0) Comments    Read More   
Posted on 06-08-2014
Filed Under (技术) by waterlin

protobuf 可以很方便地在各个语言里制定数据交换协议,通过绑定不同的语言进行编译,可生成相应的代码文件。针对 C++ 和 Java 语言的编译,非常简单,好像默认就能搞定(不知道是不是因为我本地 C++ 和 Java 的环境很完善有关),而针对 Go 语言进行编译,则有点麻烦,折腾了好一会,写个笔记备忘一下。

基本的配置步骤

  1. 安装 Go 语言,这个简单,直接安装就可以了。安装好后,记得把 bin 目录添加到系统的 PATH 变量里,这样就可以执行 go 命令了。
  2. 安装 hg 源代码管理工具,Go 下载扩展包的时候要用到的命令。
  3. 安装 goprotobuf 扩展包,先在环境变量里新建一个变量 GOPATH,指向一个你准备用来放置 Go 扩展包的路径,注意,GOPATH 所指向的路径需要与 GOROOT 不一样。
  4. 在 GOPATH 目录下,新建 src 和 pkg 目录。
  5. 安装 goprotobuf,使用如下命令即可安装

    如果前面配置正确的话,这一步应该不会提示什么错误。

  6. 上述命令安装成功后,即可在目录 $GOPATH/bin 里找到编译好的 protoc-gen-go.exe 程序,并且把 $GOPATH/bin 添加到系统的 PATH 里,这样从命令行执行的话,可以找到该命令。
  7. 在 protobuf 的编译脚本里,加上下面这一行,就可以在编译的时候,编译出针对 go 语言的代码文件。

碰到的一些基础问题

如果出现如下错误:

我感觉多半是没设 GOPATH 环境变量,这个我没准确验证。

如果提示如下错误

的话,就是没有安装 hg 源代码管理工具。

(0) Comments    Read More