
c++语言
文章平均质量分 66
炼器散人
乒乓球+节食=减肥
展开
-
Ubuntu编译MongoDB client library
要有boost库。1.download cxx-driver for 2.0, unzip to /usr/src folderwget http://downloads.mongodb.org/cxx-driver/mongodb-linux-x86_64-v2.0-latest.tgz2.sudo apt-get install libpcre3-dev3.sudo apt-get insta原创 2011-09-03 16:50:40 · 5042 阅读 · 0 评论 -
VS 2012 编译64位的GDAL
注意点,打开VS2012 x64 Native Tools Command Prompt然后运行下面的命令:nmake -f makefile.vc WIN64=TRUE等待吧,成功。之前不成功是没有注意看文档,http://trac.osgeo.org/gdal/wiki/BuildingOnWindows里面写着:If you plan to compile for the 64bit pla原创 2013-08-20 13:49:11 · 4484 阅读 · 0 评论 -
VS2012 编译GDAL
VS2012 编译GDAL原创 2013-08-02 17:44:03 · 4677 阅读 · 0 评论 -
GDAL singleton的经典错误
GDAL使用了不可靠的singleton原创 2013-08-13 16:56:43 · 3607 阅读 · 0 评论 -
用NMAKE创建VS2012 C++工程一 HelloWorld
由于需要精通GDAL的源代码,所以还是有必要精通NMAKE,先来尝试创建一个NMAKE工程。之前一篇文章Windows7中Emacs 24 shell使用Gitbash已经介绍了如何在Emacs的shell中启动gitbash进程,这样就可以轻易的利用gitbash管理git,并且能够调用很多Linux命令。本文参考:http://bojan-komazec.blogspot.com/2011/1原创 2013-08-27 16:18:56 · 7570 阅读 · 0 评论 -
用NMAKE创建VS2012 C++工程三 自动编译所有的cpp文件
在step2的基础上,继续改进1. 需要检测如果所需目录不存在,能够自动创建之因为git commit会略过空目录,如果下次从别的机器上git clone这个项目的时候,bin, obj这些目录是不存在的。使用@if not exist判断,用mkdir 创建目录2. 需要一个clean pseudotarget用来删除不需要的目录,让项目还原到刚clone下来的状态使用@if exit判断,用r原创 2013-08-28 11:27:27 · 4533 阅读 · 0 评论 -
用NMAKE创建VS2012 C++工程二 创建目录结构
紧接前文用NMAKE创建VS2012 C++工程 HelloWorld现在想做一些改进1. 不使用根据obj文件默认生成的exe文件名2. obj文件放到独立的obj目录下3. 编译出来的exe根据平台放在bin目录下,用/Fe4. 头文件放在include目录下,.cpp文件放在src目录下。用/I5. makefile文件应该放在build目录下(题外话:一般我喜欢创建一个builder目录,原创 2013-08-27 18:01:51 · 4461 阅读 · 0 评论 -
premake管理一个solution和多个project的目录树
前文premake基本配置详解只是介绍了基本的配置,一个solution包含一个project,且project没有自己的目录,生成的makefile也都在solution目录下。但是实际工作中,显然需要更多:1. 所有的project代码都应该放在自己的目录下2. premake生成的makefile需要专门放在build目录下,和cmake类似3. 最后编译出来的binary,应该放在outp原创 2013-09-06 13:33:37 · 5214 阅读 · 0 评论 -
premake 使用clang替换gcc
premake with clang原创 2013-09-03 17:10:01 · 5652 阅读 · 1 评论 -
premake 在64位Ubuntu系统下编译32位GCC程序
premake在64位Ubuntu编译gcc/clang 32位程序原创 2013-09-09 17:14:22 · 6425 阅读 · 0 评论 -
premake Ubuntu下的安装
premake是个跨平台的编译工具,先看看在Ubuntu下怎么安装。首先下载,在/usr目录下:sudo wget -O premake-4.4-beta4-linux.tar.gz http://sourceforge.net/projects/premake/files/Premake/4.4/premake-4.4-beta4-linux.tar.gz/downloadtar zxvf pr原创 2013-09-03 14:37:59 · 4847 阅读 · 0 评论 -
VS2012 中使用Emacs布局
emacs for VS 2012原创 2013-08-06 17:00:13 · 3688 阅读 · 0 评论 -
emacs使用google-c-style
google c++编码规范很全面,现在已经逐渐习惯了这种编码规范,突然想到或许emacs中有合适的el支持这种规范,到网上一找,果然有。http://google-styleguide.googlecode.com/svn/trunk/google-c-style.el下载下来,放在emacs.d目录下,然后在.emacs配置文件中添加几行:(add-to-list 'load-path (ex原创 2013-07-05 12:35:17 · 9014 阅读 · 0 评论 -
CMake创建CTest工程
在CMake工程顶层目录内的CMakeLists.txt文件中添加最后一行,使得目录结构中包含test目录,并且编译完成时会在build目录下产生test_bin目录。cmake_minimum_required(VERSION 2.8)project (your_project_name)add_subdirectory(src bin)add_subdirectory(test test原创 2011-10-04 10:35:14 · 9157 阅读 · 0 评论 -
c++ 连接 MongoDB replica-set
MongoDB的官方文档描述了如何使用连接字符串的正确格式来支持single server和replica-set server,并且声称官方驱动都支持。http://docs.mongodb.org/manual/reference/connection-string/但实际上c++驱动仍然沿用旧的方式,而且文档描述相当少。可以通过这个讨论让大家看到MongoDB c++驱动有多讨厌。http:原创 2013-05-09 19:23:10 · 6202 阅读 · 2 评论 -
用UBuntu开发OpenGL程序1
开发环境:UBuntu9.10 Desktop x86,NetBeans6.8,OpenGL2.1安装开发需要的库OpenGL网站上有这么一句话(http://www.opengl.org/wiki/Getting_started#Linux):Linux comes with Mesa libraries, which implements the OpenGL API原创 2010-02-05 23:31:00 · 10899 阅读 · 7 评论 -
用UBuntu开发OpenGL程序2
自己编译Mesa库。先安装必需的库:wget http://dri.freedesktop.org/libdrm/libdrm-2.4.17.tar.bz2tar -xf ./libdrm-2.4.17.tar.bz2cd libdrm-2.4.17./configure --prefix=/usrmakesudo make installsudo apt-原创 2010-02-10 09:25:00 · 3954 阅读 · 0 评论 -
用UBuntu开发OpenGL程序4
glutInitDisplayMode 函数,这里我设置成了单缓冲。glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);OpenGL有一个前缓冲,可能位于显存内。设置单缓冲的意思是就只使用这个前缓冲,前缓冲区上的图形将被绘制到屏幕上。但是前缓冲区并不保证一定等到你绘制完整个图形后,才将之绘制到屏幕上(并不保证一帧一帧的提交)。因此有可能你在绘制一个动画图原创 2010-02-10 14:50:00 · 3332 阅读 · 1 评论 -
用doxys生成c++文档
写C++代码,写注释,然后自动生成文档,这是任何一个规范的C++开发流程都必须的。今天试了一下doxys,挺好用的。在Ubuntu机器上,先下载Linux版的doxys程序,网址在:http://www.doxys.dk/doxys_homepage/homepage/Download/Download0_dir_description.html解压tar jxvf doxys_1_15_linu原创 2013-07-06 22:33:37 · 3216 阅读 · 0 评论 -
用UBuntu开发OpenGL程序3
glutInit函数:首先是main函数的命令行参数要传递给glutInit函数。该函数的作用是初始化glut库。http://www.opengl.org/documentation/specs/glut/spec3/node10.html如果传递给main的参数内有下列参数,将被glutInit抽取出来作为初始化glut库试用。当glutInit函数返回的时候,这些参数将从ar原创 2010-02-10 13:25:00 · 7439 阅读 · 0 评论 -
用UBuntu开发OpenGL程序5
本文不少资料来自网络,经过我的整理加工,尽量在一篇文章中讲清楚一小部分程序需要的基本概念,下面是参考列表:>http://old.blog.edu.cn/user1/20928/archives/2007/1863585.shtmlhttp://blog.163.com/zhaoxin851055@126/blog/static/81129298原创 2010-02-23 10:19:00 · 4058 阅读 · 0 评论 -
Ubuntu13.04使用Mesa
3年前写过一些关于如何使用Mesa的文章,如今再试。有些东西已经变了。首先安装:sudo apt-get install libgl1-mesa-devsudo apt-get install libglu1-mesa-devsudo apt-get install freeglut3-dev现在不用NetBeans了,用CMake创建工程。根目录下的CMakeLists.txt内容:cmak原创 2013-07-18 23:31:56 · 3827 阅读 · 0 评论 -
用NVAPI获取GPU信息
通过nvapi可以获得GPU的温度和性能参数。主页在这里:https://developer.nvidia.com/nvapi我的代码基础是来自互联网,不过略加变化。首先是获取物理GPU,然后是获取温度,最后是获取GPU性能。另外,获取GPU性能不需要自己通过offset从dll中导出函数。#include "stdafx.h"#include "R313-developer/nvapi.h"原创 2013-07-04 13:38:31 · 12549 阅读 · 5 评论 -
premake在Ubuntu和GCC环境下创建简单的C++工程
由于premake基于lua脚本,为了方便编辑lua脚本,我在emacs24中利用package system安装了lua-mode。然后创建config.lua文件,填入下面这段,主要来自:http://industriousone.com/basic-script-- A solution contains projects, and defines the available configu原创 2013-09-03 15:16:46 · 5386 阅读 · 1 评论 -
premake基本配置详解
前文premake在Ubuntu和GCC环境下创建简单的C++工程中举了一个例子,虽然能work,但是并不是很了解。后来花了点时间看了lua的语法,自以为理解了,再回头来看,发现还是有些不懂。现在明白了,premake虽然基于lua,但是也有自己的一些语法。标准的lua语法在premake中是肯定可以用的。premake自己的语法要参考文档:http://industriousone.com/sc原创 2013-09-05 14:26:43 · 9464 阅读 · 1 评论 -
JSON中双引号的轮回
1. 如果JSON对象中有属性是包含双引号的,比如{"description": "25""}如果转换成字符串形式,将自动加上反斜线,变为"25\"", 然后传递给REST API,保存到MongoDB中。此时如果使用MongoDB的shell显示该数据,为"25\"", 正确。void string_to_json_string(std::string const& str, std::stri原创 2014-03-03 16:45:18 · 5863 阅读 · 0 评论 -
C++ 转换成 JSON
经常有朋友问我如何将C++对象转换成JSON格式字符串。我的回答通常是CppCMS中的json::value. 我也写过一篇文章介绍该技术。但是最近有些不同的想法。因为用到一个vector > 数据结构,json::value不支持这个模板特化。同时也发现json::value的设计思想是将所有的c++对象存储在std::map中,然后再导出为json字符串。但是在我开发的和看到的很多web se原创 2012-09-08 17:15:21 · 21443 阅读 · 0 评论 -
如何判断windows程序是32还是64位
如果安装过VS2012的话,直接打开一个VS 2012提供的控制台窗口,比如VS2012 x64 Native Tools Command Prompt.用下面的命令查看程序的头部信息:gdal_1.8_rtc>dumpbin /HEADERS gdal18.dllMicrosoft (R) COFF/PE Dumper Version 11.00.60610.1Copyright (C) M原创 2013-08-20 13:58:54 · 7273 阅读 · 1 评论 -
clang++ 优化返回代码NRVO
clang++会自动优化函数返回代码,无论是c++11标准还是之前的标准。下面是例子:注意,clang++ 3.5默认编译选项不是c++11 c++ --versionUbuntu clang version 3.5.0-4ubuntu2 (tags/RELEASE_350/final) (based on LLVM 3.5.0)Target: x86_64-pc-linux-gnuThre原创 2015-04-11 23:22:00 · 2779 阅读 · 0 评论 -
centos 6.6 安装 gcc 4.9.1
不用编译,执行下面三步即可cd /etc/yum.repos.dwget http://linuxsoft.cern.ch/cern/scl/slc6-scl.repoyum -y --nogpgcheck install devtoolset-3-gcc devtoolset-3-gcc-c++原创 2015-09-24 23:25:50 · 3832 阅读 · 0 评论 -
Emacs C++智能提示
Emacs中的C++程序智能提示是个不容易的活。我使用的是auto-completion插件。该插件依赖clang编译器进行代码分析,当然还依赖其他的emacs插件。下面是我的Emacs配置文件。;;------------------------------------------------------------------------------;; auto complete;;--原创 2011-09-12 14:38:33 · 8031 阅读 · 2 评论 -
c++11 函数内部返回对象使用move语义的最佳实践
一句话,直接返回即可,不用任何变化。当启动了c++11选项后,通过函数返回代码没有发生任何变化,但是已经使用了move语义,而不需要之前的NRVO编译器优化技术。下面是stackoverflow上的一个讨论贴,比较有价值:246down voteacceptedFirst examplestd::vector return_vector(void){ std::vector tmp {1原创 2015-04-12 21:28:24 · 6768 阅读 · 1 评论 -
c++11 enum class
c++ 11的enum class原创 2013-09-14 00:20:37 · 16954 阅读 · 0 评论 -
MongoDB C++ 数组的写操作
经常会碰到这类问题,现在将前两年自己写过的代码总结一下,以后编程会方便很多。Document中包含两个数组,一个简单点,每个元素都是string,一个复杂点,每个元素都是一个对象,有两个属性address和status.> db.schedule.findOne({"_id" : ObjectId("51e930f92291307bb05a1a84")}){ "_id" : ObjectId(原创 2013-07-19 21:06:40 · 5632 阅读 · 0 评论 -
九异常
基本知识程序做错误检查是必要的,通常我们可以通过返回值告诉客户有了错误,不过异常提供了更加方便的手段和丰富的信息。当某处程序发现了错误,可以选择自己处理或者交给外部调用者处理,比如:void Func(char* p){if(p==NULL){throw std::invalid_argument(“p is NULL”);}}而调用者可以选择拦截该异常对象或者放过,交由更外层的逻辑处理。try{原创 2007-07-17 14:36:00 · 2358 阅读 · 0 评论 -
Protocol Buffer 一 安装
下载编译器的源代码:http://code.google.com/p/protobuf/downloads/list 阅读README(C++/Java/Python)LInux下的C++安装方式: $ ./configure $ make $ make check $ make installLinux下的Java安装方式1.首先执行C++安装方式2.建议使用Nexus作为私服需要修改p原创 2012-05-30 19:51:58 · 4003 阅读 · 0 评论 -
用twitcurl C++库访问Twitter REST API 1.1
首先获得最新的代码:svn checkout http://twitcurl.googlecode.com/svn/trunk/ twitcurl-read-only进入twitcurl-read-only/libtwitcurls目录后,运行make编译如果找不到curl/curl.h文件,则安装curl的开发库sudo apt-get install libcurl4-openssl-devm原创 2014-01-20 13:53:38 · 5049 阅读 · 0 评论 -
Ubuntu上用premake编译GDAL
premake编译GDAL原创 2013-09-12 16:42:44 · 3498 阅读 · 0 评论 -
跨平台C++整数类型 之一 固定宽度整数(boost和C++11)
原来一直使用ACE的跨平台整数类型,比如:ACE_UINT32, 但是自己使用C++的风格是明显的现代风格,以范型为主,所以最近开始逐步替换ACE的代码,改用boost库。在boost库中,standard integer types用来支持跨平台的整数类型,我用的是1.48版本,参考文档:http://www.boost.org/doc/libs/1_48_0/libs/integer/doc/原创 2012-11-25 21:54:30 · 5437 阅读 · 0 评论 -
C++的时间
std命名空间绝大多数C++中的时间类型以及函数都只是重用了C的,仅仅是位于std命名空间中。要使用C++时间,首先要include 文件。看一下ctime文件内容,会发现包含了time.h文件。#pragma GCC system_header#include #include #ifndef _GLIBCXX_CTIME#define _GLIBCXX_CTIME 1// Ge原创 2011-09-13 20:43:53 · 6705 阅读 · 0 评论