C/Linux
rickone2009
C/C++ Lua 游戏
展开
-
从当前路径加载共享库
1、改环境变量LD_LIBRARY_PATH,加上./,/etc/profile或/root/.bash_profile如果进程不属于任何sid,那就不能这样做了2、改/etc/ld.so.conf文件,可惜这里不能用相对路径,但是你写./也是可以的,这样做它就只会登记你当前运行ldconfig时的当前目录里的.so文件,这里写的目录,他会在运行ldconfig的时候,生成ld.so.cache。如果你新加了.so库,也需要重新运行ldconfig。系统启动时也会运行一次。3、老实把库文件符号连接到/usr原创 2010-08-06 20:54:00 · 502 阅读 · 0 评论 -
设计一个通用的makefile
只说一下思路。先说说make吧。make这个工具只用来编译软件太可惜了,它最强大的地方其实是在模式推导,我觉得用它来编译软件只有一个理由,就是你希望做增量编译,而实际上仔细一想,它的增量编译只能做到比较文件修改时间上,这太粗糙了,想一下你有一个头文件,被100个.cpp包含,你只改其实一个类的实现,而只有一个实现的.cpp文件用到了它,那其它99个也会被增量编译出来,它没办法做到‘发现’更小的修改单元。而对于‘增量编译’的需求,往往是程序员自己写程序的过程中,实际软件发布构建的时候都是rebuild,所以m原创 2010-08-06 22:03:00 · 801 阅读 · 0 评论 -
单身对象的安全构造
<br />单身对象可以泛指一些系统需要保存的中间状态,通常如果一个接口函数,如果里面保存有状态,则可以认为存在着一个单身对象。<br /> <br />单身对象在任何情况下,只能构造一次,构造的过程在什么时候做,是非常讲究的,你如果提供初始化函数,比如WinSocketAPI的初始化函数WSAInit,那你要自己控制好调用顺序,确保它先于其它API的调用之前被调用。<br /> <br />有一种简单做法,结果是这样的,在第一次调用应用接口的时候初始化,反初始化就不做了,不反初始化的原因是,它是单身,它的原创 2010-12-03 01:04:00 · 417 阅读 · 0 评论 -
一个lua版的zset数据结构实现
redis里的zset是一种有序集合,从逻辑上,可以理解为在集合的基础上,为每一个成员增加了分数字段,分数是一种浮点数值,并可以相同,它们按序排列起来。它能对分数在增,删,查找上都能提供对数时间复杂度的操作。redis里的zset是利用一个skiplist和一个dict实现的,其中关键数据结构就是skiplist,跳跃表。skiplist的原理和基本实现网上有很多,不再啰嗦。基于zset的需求,会有原创 2016-09-02 00:12:38 · 1994 阅读 · 0 评论