
C++
kissnsms
这个作者很懒,什么都没留下…
展开
-
C++ 在模版类里面使用STL 报错?
看代码:typedef list > Timers_type;typedef typename Timers_type::iterator Timers_iterator_type;明白了吗?原创 2012-08-18 19:38:25 · 642 阅读 · 0 评论 -
GCC/G++乱码的完美解决方案
GCC/G++乱码的解决方案在网上流传得最多的是:export LANG=C,这个方法是可以解决GCC/G++乱码的问题,但是会导至系统中一些其他工具无法无法正常工作。最完美的解决方案是:1. locale命令来查看你的系统使用的字符集。比如我的SUSE11 ,默认为:en_US.UTF-82. 将你的SHELL工具的编码方案更改成与系统编码方案一至,即可。原创 2012-08-22 17:49:49 · 8733 阅读 · 1 评论 -
64位系统下编译32位库
./configuer CFLAGS="-m32 -march=i386 -mtune=i386"或者直接在你的MAKEFILE 中加行也行原创 2013-09-06 14:02:26 · 1014 阅读 · 0 评论 -
64 SUSE 下GCC 4.8.2 编译的 skipping incompatible 问题
最近把GCC升级到了 4.8.2 ,结果编译的时候提示以下错误:/usr/bin/ld: skipping incompatible /usr/local/lib/libstdc++.so when searching for -lstdc++/usr/bin/ld: skipping incompatible /usr/local/lib/libstdc++.a when searchi原创 2013-11-14 14:31:47 · 13256 阅读 · 2 评论 -
如何静态链接到 libstdc++. 喜欢升级的GCC的朋友快来看看。
Linking libstdc++ staticallyChristopher Baus writes about his problems linking libstdc++ statically. Yes, making C++ binaries that will work properly in different Linux distributions is somewhat转载 2013-12-05 15:24:42 · 14456 阅读 · 1 评论 -
boost 1.55在GCC 4.8.2 下的BUG
如果你的库使用了boost 1.55 下的ASIO,并且使用-std=c++11来编译话,你的程序也需要添加 -std=c++11,否则各种问题。包括:asio::io_server::run() 直接返回和boost::asio::ip::tcp::socket 的句柄值会出错。因此建议:如果你的库或程序用到了BOOST,则应统一使用 -std=c++11或者全部不使用-std=c++11。原创 2014-01-03 11:42:14 · 1385 阅读 · 1 评论 -
SUSE 10 下GDB无法查用调用堆栈的解决方案
一直喜欢玩技术,为了使用C++11,把编译服务器的GCC升级到了4.8.2。编译出来的程序放在线上环境上跑了几周,没问题。但昨天版本更新后,有一个程序CORE,用GDB老是看不到调用堆栈,整了一天,也没搞定(-g 这么弱的错误,当然不会发生)。今天早上跑来一看,腾讯CVM上的SUSE 10竟然还是用的GCC 4.1.2 。我突然一起,是不是GDB也一样的古老呢?一看GDB竟然是6.6的,吐血。果断原创 2013-12-24 14:27:51 · 909 阅读 · 0 评论 -
C++服务器端编码心得
1. 用断言宏来检测程序的逻辑错误。分析一下程序CORE掉的原因,绝大部分是因为空指针或者无效指针引发的,而绝大部空指什和无效指针是因为程序的逻辑错误导至的。因此,在调试版中用断言宏来检测逻辑错误,是一个很有效的方式。 以下是我程序里面的一段代码: //如果坐位不为空 if (pSeat != NULL) { //那么这个座位上就一定有人 ANT_WARS_ASSERT原创 2014-05-05 16:48:21 · 861 阅读 · 0 评论 -
程序之路:我们一起来调BUG!
自从PHP接手翻牌这功能,就一直有用户反馈翻牌不成功。到现在,好几个月了吧。我靠,比小强的生命力还强的BUG。PHP和C++都查过这个问题,然后PHP告诉我们:服务器端写的验证信息有误,导至翻不了牌。吐血,十几行的代码,我看了多次,就是没能看出什么问题来, 于是怀疑是PHP的BUG,让PHP加一点日志去定位一下。今天下午,PHP的同学,又提起这个问题。我郁闷得快吐血了。习惯地先看看自己的代码,原创 2014-05-27 15:59:12 · 762 阅读 · 0 评论 -
乱谈C++
总结,写成文档,再拿来分享和讨论,是我在做华为外包最大的收获之一。 有一天,和朋友乱谈品酒师:品酒师如何不会因为个人的品味而影响自己对酒质做出客观,公正的评值。与品酒师相反,程序员大都数时候就像教徒一样虔诚和狂热。他们固守着自己或者某人的观点,拒绝接受新的语言或者方法,过度自信或者过度不自信,过份追求技术本身而忘记了技术的目的。等等如此。现实中,有人害怕微软的串口通讯组件有太原创 2014-05-27 16:02:29 · 923 阅读 · 0 评论 -
BerkeleyDB 的编译和安装
到官网下载最新版本(我一般习惯用最新版本,所以自己搜索下载地址吧)1. 把下载过来的代码包解压。。。2. #cd db-***/build_unix #../dist/configure 特别注意,如果要使用其C++接口的话, 请执行:../dist/configure --enable-cxx 否则不会生成libdb-cxx.so.3. #make 4 #原创 2013-05-02 15:59:43 · 2107 阅读 · 0 评论 -
深入设模式之:迭代器模式之编写一个兼容STL 算法的Iterator
#include #include class Seat{public:Seat(int no):no_(no) {}int no_;};class Table{static const std::size_t BEGIN_SEAT = 1;static const std::size_t INVALID_SEAT = 0;static const std::size原创 2013-04-12 16:17:23 · 961 阅读 · 0 评论 -
std::sort 升序 ? 降序
Std::sort这个函数,大家知道用,而且入可以使用一个自定义的元素对比函数。比较郁闷的是,老是忘了这个函数返回TRUE,对排序结果的影响(升序还是降序) 于是用GTEST写了一段代码(测试代码,将就些看吧) class HandHogRecord{public:explicitHandHogRecord(chips_type bet):bet_(原创 2013-04-08 18:00:19 · 9248 阅读 · 0 评论 -
libmemcached 1.0.10 SUSE 10 下无法正常工作的原因
公司应接入TX平台,编译用的服务器是SUSE 11 SP2, 但TX用的却是非常古老的 SUSE 10 SP1,将程序编译好后,放到TX服务器上,一直在报读写memcached失败的错误,用GDB定位了一下:libmemcachedstatic memcached_return_t network_connect(org::libmemcached::Instance* server)原创 2012-08-28 12:13:27 · 769 阅读 · 0 评论 -
使用C++11里面的Lambda表达式,来取代仿函数
圣人告诉我们,用C++中尽可能使用for_each来迭代容器,但是为了使用for_each,我们不得不写很多个 operator (...) 现在有了Lambda表达式:一切都变得和谐了!看如下代码char str[]="Hello World!";int uppercase = 0; for_each(str, str+sizeof(str), [&u原创 2012-08-21 09:35:38 · 3434 阅读 · 0 评论 -
64位系统下libmemcached在GCC 4.7.1 下编译失败的解决方案
今天新装了GCC 4.7.1,于是想把老的库重新编译一下(./configure CC=/usr/local/bin/gcc 来指定编译器版本。但想到遇到如下错误: CXXLD libhashkit/libhashkit.la/usr/local/lib/../lib/libstdc++.so: could not read symbols: File in wrong f原创 2012-08-25 17:57:35 · 3909 阅读 · 2 评论 -
如何使用指定版本的GCC/G++来编译autotools打包的程序
对于autotools来生成Makefile的程序包,不建议修改Makefile来指定GCC/G++的版本。最佳方案:./configure CC=你想使的C编译器的绝对路径./configure CXX=你想使的C++编译器的绝对路径比如:./configure CXX=/usr/local/bin/g++这样就可以很方便地让系统内多个版本的编译器共存了。。。原创 2012-08-25 16:40:48 · 6523 阅读 · 0 评论 -
多线程程序常见Bug剖析(下)
上一篇文章我们专门针对违反原子性(Atomicity Violation)的多线程程序Bug做了剖析,现在我们再来看看另一种常见的多线程程序Bug:违反执行顺序(Ordering Violation)。简单来说,多线程程序各个线程之间交错执行的顺序的不确定性(Non-deterministic)是造成违反执行顺序Bug的根源[注1]。正是因为这个原因,程序员在编写多线程程序时就不能假设程序转载 2012-11-30 10:18:42 · 586 阅读 · 0 评论 -
多线程程序中操作的原子性
0. 背景原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多线程程序中对Bit field(位域)的读写操作是否是线程安全的?3. 程序员该如何使用原子操作?1. 多线程环境下对变量的读写操作是否是原子的?我转载 2012-11-30 10:20:02 · 458 阅读 · 0 评论 -
《程序员的自我修养》中关于加锁不能保证线程安全的一个错误
《程序员的自我修养》中关于加锁不能保证线程安全的一个错误AuthorGuanchengPublished on04/09/2011Categories并行编程21Tagsmemory visibility, Pthreads, 原子操作, 多线程编程, 线程安全在《程序员的自我修养 — 链接装载与库》一书第28页“过度优化”这一节中,作者转载 2012-11-30 10:47:59 · 1022 阅读 · 0 评论 -
多线程程序常见Bug剖析(上)
编写多线程程序的第一准则是先保证正确性,再考虑优化性能。本文重点分析多线程编程中除死锁之外的另两种常见Bug:违反原子性(Atomicity Violation)和违反执行顺序(Ordering Violation)。现在已经有很多检测多线程Bug的工具,但是这两种Bug还没有工具能完美地帮你检测出来,所以到目前为止最好的办法还是程序员自己有意识的避免这两种Bug。本文的目的就是帮助程序员了解这两转载 2012-11-30 09:57:37 · 675 阅读 · 0 评论 -
分享一个延时加载的封装代码
// delayloader.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;#include #include template class DelayLoader{private: DelayLoader(); DelayLoader(const De原创 2012-12-07 14:25:56 · 633 阅读 · 0 评论 -
工作总结之:优化函数调用
最近相对比较有时间,于是想把代码整理一下,重构:永无止境. 去年的时候,SOCKET用的是ACE,因为是公司用了很长时间的一个框架,也就没细想,直接拿来过来用。但虫虫和棋牌不同:服务器要处理的数据量完全不是一个级别,而公司包装过的ACE竟然使用的是阻塞模式。于是,一个风高月黑的晚上,服务器卡得动弹不得。为了查这个BUG,我将所有的比较复杂的函数都加了时间跟踪,也就原创 2014-05-27 16:09:56 · 874 阅读 · 0 评论