c/c++
yegen0606
这个作者很懒,什么都没留下…
展开
-
cmake使用示例与整理总结
cmake中一些预定义变量PROJECT_SOURCE_DIR 工程的根目录PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/buildCMAKE_INCLUDE_PATH 环境变量,非cmake变量CMAKE_LIBRARY_PATH 环境变量CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.转载 2016-03-01 12:56:16 · 400 阅读 · 0 评论 -
Linux下动态共享库加载时的搜索路径详解
对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的。 具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 1.ELF可执行文件中动态段中DT_RPATH所指定的路径。这实际上是通过一种不算很常用,却比较实用的方转载 2016-04-05 15:24:15 · 296 阅读 · 0 评论 -
Window和Linux动态库搜索路径的次序
最近在做的项目中使用到动态库的动态加载技术,Windows和Linux都提供了相应的函数来打开动态库、获取函数指针和关闭动态库,在打开动态库函数(dlopen或LoadLibrary)中指定动态库的文件名后,在程序运行时是以什么次序来搜索动态库呢? Linux下搜索路径的次序:1) ELF可执行文件中动态段中DT_RPATH所指定的路径,不常用但是比较使用的方法;转载 2016-04-07 13:08:48 · 544 阅读 · 0 评论 -
win32下安装mingw32和cmake来编译opencv2.4.9
要注意的就是mingw32和cmake的版本了吧,我第一次编译就是以失败告终,然后痛定思痛,把自己的mingw32和cmake去卸载又安装的别人告知的,结果成功。先是mingw32,点击打开链接,可下载tdm-gcc-4.9.2.exe,4.9.2是我使用的版本,不知现在这个页面上版本更新没。安装的话,安装时选择默认的支持C++/C的那种方式即可,默认会自动添加到系统环境变量。如果转载 2016-04-07 13:20:00 · 1015 阅读 · 0 评论 -
CMake 手册详解(二)
====================================================--build : 构建由CMake生成的工程的二进制树。(这个选项的含义我不是很清楚—译注)该选项用以下的选项概括了内置构建工具的命令行界面 = 待创建的工程二进制路径。 --target = 构建,而不是默认目标。 --config =转载 2016-04-08 08:37:06 · 387 阅读 · 0 评论 -
linux下so动态库一些不为人知的秘密(上)
linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/lslinux-vdso.so.1 => (0x00007fff597ff000)libsel转载 2016-03-28 20:45:25 · 331 阅读 · 0 评论 -
linux下so动态库一些不为人知的秘密(中)
我们知道linux链接so有两种途径:显示和隐式。所谓显示就是程序主动调用dlopen打开相关so;这里需要补充的是,如果使用显示链接,上篇文章讨论的那些问题都不存在。首先,dlopen的so使用ldd是查看不到的。其次,使用dlopen打开的so并不是在进程启动时候加载映射的,而是当进程运行到调用dlopen代码地方才加载该so,也就是说,如果每个进程显示链接a.so;但是如果发布该程序时候忘记转载 2016-03-28 20:58:49 · 594 阅读 · 0 评论 -
linux下so动态库一些不为人知的秘密(下)
继续上一篇《 linux下so动态库一些不为人知的秘密(中) 》介绍so搜索路径,还有一个类似于-path,叫LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只设置RPATH。 [stevenrao] $ g++ -o demo -L /tmp/ -ltmp main.cpp [stevenrao] $ readelf -d demo转载 2016-03-28 21:15:09 · 852 阅读 · 0 评论 -
C++的可移植性和跨平台开发
概述 今天聊聊C++的可移植性问题。如果你平时使用C++进行开发,并且你对C++的可移植性问题不是非常清楚,那么我建议你看看这个系列。即使你目前没有跨平台开发的需要,了解可移植性方面的知识对你还是很有帮助的。 C++的可移植性这个话题很大,包括了编译器、操作系统、硬件体系等很多方面,每一个方面都有很多内容。鉴于本人能力、精力都有限,只能介绍每一个方面最容易碰到的问题,供大伙儿参转载 2016-04-16 23:01:35 · 400 阅读 · 0 评论 -
虚函数表是在编译的时候还是运行的时候产生的
引入:这段时间一直在思考虚函数表的问题,同时也想知道虚函数表是在什么时候产生的本人是在VS2010的环境下,如有错误欢迎指出,谢谢。观察代码#include#includeclass A{public:A(); virtual~A(); void fun1(){ printf("123"); }}转载 2016-04-17 12:53:33 · 1971 阅读 · 0 评论 -
虚函数表是在编译的时候还是运行的时候产生的
引入:这段时间一直在思考虚函数表的问题,同时也想知道虚函数表是在什么时候产生的本人是在VS2010的环境下,如有错误欢迎指出,谢谢。观察代码#include#includeclass A{public:A(); virtual~A(); void fun1(){ printf("123"); }}转载 2016-04-17 12:54:41 · 1010 阅读 · 0 评论 -
GCC的符号可见性——解决多个库同名符号冲突问题
问题最近项目遇到一些问题,场景如下主程序依赖了两个库libA的funcA函数和libB的funcB函数。示意的代码(main.cpp)如下:#include int funcA(int, int);int funcB(int, int);int main() { printf("%d,", funcA(2, 1)); printf("%d\n",转载 2016-05-05 09:32:40 · 2215 阅读 · 1 评论 -
boost.asio系列——io_service
boost.asio系列——io_serviceIO模型io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象)。 asio::io_service io_service; asio::ip::tcp::socket socket(io_service);在asio转载 2016-05-20 13:40:54 · 448 阅读 · 0 评论 -
C++ 引用计数技术及智能指针的简单实现
一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧)。最近花了点时间认真看了智能指针,特地来写这篇文章。智能指针是什么简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象访问的值也会改变.所不同的是,智能指针能转载 2016-06-05 20:56:52 · 412 阅读 · 0 评论 -
开发者都应该使用的10个C++11特性
摘要在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下面是我总结的,C++开发者都需要学习和使用的C++11新特性。auto 在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个转载 2016-08-29 16:25:48 · 459 阅读 · 0 评论 -
462 字节 C 代码实现雅虎 logo ACSII 动画
【伯乐在线导读】:说到代码混淆艺术,大家可能会想到 IOCCC 大赛中的阿卡林作品(如下图)。“阿卡林”,动漫作品《摇曳百合》中的主人公之一不过本文介绍 Andy Sloane 的一个作品:C 代码实现雅虎 logo ACSII 动图。自从他把这段代码放到我们的内网以来,一直有做优化改进,下面是最终版。来吧,试一下:[2016-08-23 编辑更新]:因站内第三方插件之间兼容性转载 2016-08-23 12:59:00 · 434 阅读 · 0 评论 -
linux system函数是否执行成功判断方法
首先我们看一个例子: status = system("./test.sh"); 1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。2、如何正确判断test.转载 2016-09-05 16:51:25 · 3082 阅读 · 0 评论 -
使用checkinstall1.6.1时遇到的问题
在使用checkinstall1.6.1对软件制作deb包时,发现我如果将包name那一项修改为自己想要的名字而不使用默认的build,就会出现各种奇怪的问题,比如安装的库没有对应的链接文件,可执行文件没有安装成功等等诡异的问题,现在还不知道是checkinstall软件的bug,还是自己用的不对。这里记录一下吧。暂时使用时就不修改包名字了,就使用默认的build好了原创 2016-04-02 23:08:18 · 17714 阅读 · 0 评论 -
C/C++刁钻问题各个击破之细说sizeof
摘要:Sizeof的作用非常简单:求对象或者类型的大小。然而sizeof又非常复杂,它涉及到很多特殊情况,本篇把这些情况分门别类,总结出了sizeof的10个特性:(0)sizeof是运算符,不是函数;(1)sizeof不能求得void类型的长度;(2)sizeof能求得void类型的指针的长度;(3)sizeof能求得静态分配内存的数组的长度!(4转载 2016-02-25 08:47:47 · 334 阅读 · 0 评论 -
GCC wiki Visibility
Note: the text on this page was almost integrally written by Niall Douglas, the original author of the patch, and placed on nedprod.com. This is basically a local mirror (especially useful because t转载 2016-03-01 14:50:11 · 540 阅读 · 0 评论 -
C++中引用和指针的区别
下面用通俗易懂的话来概述一下:指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义:引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用。见下图,所示引用的含义:2、指针和引用的区别转载 2016-02-13 15:34:49 · 463 阅读 · 0 评论 -
从4行代码看右值引用
“右值引用”是c++11标准中引入的概念。以前只知道引用,那什么是右值引用呢?下面是一篇讲的比较好的关于右值引用的文章,名字叫《从4行代码看右值引用》,这里记录一下。概述右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:12int转载 2016-02-13 16:22:26 · 580 阅读 · 0 评论 -
《面试中的Singleton》读后总结
在设计模式中,单例模式应该说是最简单的一个模式,但这个最简单的模式还是会引申出很多的问题。看看下面的文章吧,能学到不少知识。总结一下如下:1.单例模式中要对构造函数,析构函数,拷贝构造函数,赋值运算符,取址运算符等函数做保护,声明为private2.可以使用模板写出可复用的单例模式3.考虑生存周期问题,如果使用局部静态变量,则实例在第一次调用Instance()函数原创 2016-02-13 20:12:51 · 431 阅读 · 0 评论 -
c++模板的特化
【转载】http://www.blogjava.net/bacoo/archive/2009/06/22/283480.html对模板特化的理解:特化整体上分为全特化和偏特化,这一点大家都没有什么置疑,但是细分它们各包括哪几种状态就很难界定了,而且很多权威的书上都不一致,管它呢,反正我们能会用各种特化就可以了。下面就谈谈我个人对特化的划分和定义:所谓特化,就是将泛型的东东搞得具转载 2016-02-14 12:59:50 · 277 阅读 · 0 评论 -
减少C++代码编译时间的方法
c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你做的工程比较大(比如二次封装chrome这类的开发),重新编译一次的时间就会浪费上班的大部分时间,这样干了一天挺累的, 但是你的老板说你没有产出,结果你被fired, 是不是很怨啊, 如果你早点看到这段文章,你就会比你转载 2016-02-15 10:46:27 · 359 阅读 · 0 评论 -
cmake 常用变量和常用环境变量查表手册---整理 .
一,cmake 变量引用的方式:前面我们已经提到了,使用${}进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过${}取值二,cmake 自定义变量的方式:主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义_BINARY_DIR 和_SOURCE_DIR 两个变量。显式定义的例子我们前面也提到了,使用 SET 指令,就转载 2016-03-02 15:33:45 · 625 阅读 · 0 评论 -
减少模板中的代码膨胀
在非模板代码中,重复十分明确:你可以“看”到两个函数或两个class之间有所重复。然而在模板代码中,重复是隐晦的:毕竟只存在一份模板源码,所以你必须培养自己去感受当模板被具现化多次时可能发生的重复。 例如:下面的模板template //template支持n * n矩阵,元素类型为T的对象class SquareMatrix{ public: .转载 2016-02-15 14:46:23 · 2237 阅读 · 0 评论 -
c++ 模版函数的定义和实现放在一个文件中
今天使用模版函数,遇到一个问题。当我定义一个类,并且将它的一个成员函数定义为模版类型时,需要将该模版函数的实现与该类放在一个文件中。比如在a.h中定义了class a:[html] view plain copyclass a { ... templatetypename T> a(const转载 2016-02-15 15:59:44 · 468 阅读 · 0 评论 -
一个适用于层级目录结构的makefile模版
今天 写了个层次化的Makefile模版,用来自动化编译项目,这个模版应当包含以下功能:适用于层次化结构,Makefile主要内容都放在顶层目录下的Makefile.env中,子层Makefile包含这个Makefile.env,只要增加一些变量就可以编译,特别方便添加新的功能模块自动解析头文件依赖我的程序的目录结构是这样的:1. 源文件目录src,模块xxx放在src转载 2016-02-21 17:58:03 · 446 阅读 · 0 评论 -
如何成为一个C++高级程序员
C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。 现在学习java、C#等语言的人数远远高于C++,主转载 2016-02-22 22:35:09 · 267 阅读 · 0 评论 -
boost::function用法详解
要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从"boost/function/function0.hpp" 到 "boost/function/function10.hpp". 如果你知道你想保存在 function 中的函数的参数数量,这样做可以让编译器仅包含需要的头文件。如果包含 "boost/functio转载 2016-02-23 13:33:20 · 290 阅读 · 0 评论 -
eclipse与cmake配合使用
c++项目中使用cmake作为构建工具非常方便,但同时又希望使用eclipse作为源码编辑工具。网上大部分都在说使用如下方法:mkdir /home/eric/certi_build cd /home/eric/certi_build cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../cert原创 2016-03-31 23:29:01 · 11223 阅读 · 0 评论 -
CMake 手册详解(一)
公司的一个项目使用CMake作为跨平台构建工具;业务有需求,当然要好好研读一下官方的技术手册。目前的计划是先把官方手册翻译一下,了解清楚CMake中的各种命令、属性和变量的用法。同时在工作中也会阅读CMake的真实源码,后续会基于此陆续写一些工程中使用CMake的心得。CMake的版本也在不停更新,有些新的命令和变量会随着版本更新添加进来,这是后事了,暂且不管;现在锁定CMake 2.8.3作为手转载 2016-04-02 11:24:20 · 351 阅读 · 0 评论 -
使用CPACK制作安装包
使用CPACK制作安装包需要在CMakeLists.txt文件中加入如下内容。############################################################## ### Setup PACKAGING原创 2016-04-02 12:14:18 · 3897 阅读 · 0 评论 -
dpkg错误解决
在使用dpkg命令安装deb包时,如果出现如下错误提示:trying to overwrite XXX which is also in package XXXX可以通过sudo dpkg -i --force-overwrite XXXX.deb命令,也就是添加--force-overwrite参数强制覆盖之前安装的版本即可。原创 2016-04-02 15:51:22 · 4177 阅读 · 0 评论 -
ubuntu 12.04 gcc版本为4.6降到4.4方法
ubuntu 12.04中的gcc版本为4.6版本过高,降级为4.4步骤:1. 查看gcc版本和g++版本xumingtao@huaserver1:/usr/bin$ ls -l gcc*lrwxrwxrwx 1 root root 7 Aug 30 19:26 gcc -> gcc-4.6-rwxr-xr-x 1 root root 353216 A转载 2016-08-26 12:29:20 · 955 阅读 · 0 评论