Author: David

Linux 常用命令

老是忘记一些命令。于是便记了下来:) SSH常用命令 1. 不带端口号的连接: $ ssh -l username ip $ ssh -l ubuntu0 192.168.123.100 2. 带端口号的链接: $ ssh -l username ip -p port $ ssh -l root 224.217.33.111 -p 8888 SCP常用命令 1. 从远端拷贝单个文件到本地,带端口号(-P 为大写): $ scp -P port root@ip:path_remote path_local $ scp -P 8888 root@224.217.33.111:/home/aku/www/weekphp/sql.txt /home/david/ 2. 从远端拷贝整个文件目录到本地,带端口号(-P 为大写): $ scp -r -p port username@ip:path_remote […]

C++调用自己的.so

由于一些原因,需要在C++中动态加载自己写的动态链接库(.so)文件。网络上的资源挺多,我也看了不少,参考最多的是下面这三篇 1. dlopen加载c++ 函数及类: http://blog.csdn.net/lwj1396/article/details/5204484 2. 上一篇的英文版本: http://www.isotton.com/devel/docs/C++-dlopen-mini-HOWTO/C++-dlopen-mini-HOWTO.html#theproblem 3. 动态调用动态库方法 .so: http://blog.csdn.net/lbmygf/article/details/7401862 再说一说自己的心得吧。 首先介绍一下动态库和静态库之间的区别 静态库是指编译连接时,把库文件的代码全部加入到可执行文件中,所以生成的文件较大,但运行时,就不再需要库文件了。即,程序与静态库编译链接后,即使删除静态库文件,程序也可正常执行。 动态库正好相反,在编译链接时,没有把库文件的代码加入到可执行文件中,所以生成的文件较小,但运行时,仍需要加载库文件。即,程序只在执行启动时才加载动态库,如果删除动态库文件,程序将会因为无法读取动态库而产生异常。 那么如何调用动态库?如何在C语言下,其实是很简单的(调用dlopen、dlsym和dlclose就够了),但对C++来说,情况稍微复杂。动态加载一个C++库的困 难一部分是因为C++的name mangling 然后从介绍Name Mangling开始 在每个C++程序(或库、目标文件)中,所有非静态(non-static)函数在二进制文件中都是以“符号(symbol)”形式出现的。这些符号都是唯一的字符串,从而把各个函数在程序、库、目标文件中区分开来。 在C中,符号名正是函数名:strcpy函数的符号名就是“strcpy”,等等。这可能是因为两个非静态函数的名字一定各不相同的缘故。 而C++允许重载(不同的函数有相同的名字但不同的参数),并且有很多C所没有的特性──比如类、成员函数、异常说明──几乎不可能直接用函数名作符 号名。为了解决这个问题,C++采用了所谓的name mangling。它把函数名和一些信息(如参数数量和大小)杂糅在一起,改造成奇形怪状,只有编译器才懂的符号名。例如,被mangle后的foo可能 看起来像foo@4%6^,或者,符号名里头甚至不包括“foo”。 其中一个问题是,C++标准(目前是[ISO14882])并没有定义名字必须如何被mangle,所以每个编译器都按自己的方式来进行name mangling。有些编译器甚至在不同版本间更换mangling算法(尤其是g++ 2.x和3.x)。即使您搞清楚了您的编译器到底怎么进行mangling的,从而可以用dlsym调用函数了,但可能仅仅限于您手头的这个编译器而已, 而无法在下一版编译器下工作。 解决方案 extern “C” C++有个特定的关键字用来声明采用C binding的函数:extern “C” 。 用 extern “C”声明的函数将使用函数名作符号名,就像C函数一样。因此,只有非成员函数才能被声明为extern “C”,并且不能被重载。尽管限制多多,extern “C”函数还是非常有用,因为它们可以象C函数一样被dlopen动态加载。冠以extern “C”限定符后,并不意味着函数中无法使用C++代码了,相反,它仍然是一个完全的C++函数,可以使用任何C++特性和各种类型的参数。 示例程序1. 加载简单函数 目录结构 示例程序1在test1目录下,这个例子也主要是参考第一篇博客写的。有一些修改。 main.cpp的代码如下 [cpp] //———- //main.cpp: //———- #include #include int main() { using […]

Animal Farm

🙂 一个猪变人的童话故事有木有——《Animal Farm》 这本书是大学姐陪我去买的哟!!!很有纪念意义有木有!!!其他已知出场人物动物都没有这个待遇哟有木有!!!(*^__^*) 嘻嘻…… ================================背景割==================================== 看完整本书,依然是角色的名字都记不全,甚至连Napoleon这个大大大大大反派头头的名字都是在有道词典里搜了一下“拿破仑”才拼全,实在有点不好意思。 Napoleon这头顶着男主角光环的猪,这头腹黑猪,这头盗取了革命果实的猪,这头越来越残暴的猪,这头应该已经被无数世人咒骂过的猪,早已死在了一九不知多少年(好的,如果一头猪能活过55岁,那它也可能死于二零多少年。不要纠结这里了好吗,强迫症么有)。 被盗取了革命果实,其他动物确是值得同情的。好不容易推翻了农场主的统治,好不容易击退了敌人的反扑,好不容易盼来了平等、自由,即使是在最后的最后的前一刻,在那划不清人猪界限的前一刻,动物们依然是乐观的,依然认为:至少,我们现在是在为自己劳动,不被人类所奴役,我们是自由的,这就够了。殊不知,理想已经离他们很远很远,只是逐渐麻木而不觉罢了。 逐渐麻木——我想,这或许是Napoleon采取的连它自己都不知道的一个策略。这么对比并不那么恰当,就像你觉得你大学室友4年都没变,但一个4年不见他的人觉得几乎换了一个人一样。慢慢的,总是不易察觉的。 在欲望本生会无限膨胀这个属性的作用下,Napoleon慢慢的一点一点的往集权的方向走去。动物们慢慢适应,慢得觉得生活好像就应该是这样的,慢得即使有一些觉得不对的地方也只会是短暂的不安而已。最终它终于达到了权利的巅峰,当然也伴随着残暴的统治。最初的乌托邦,最终的不知道什么汤(加了两勺铊盐的?)。 不了解那个年代的历史,也就无清楚作者在映射什么了。不过能看到猪变人这个神奇的事情也挺高兴呢。 晚安, 2013-4-28 02:21:27

认识一群技术男真好,嘎嘎

IT技术男——居家好帮手,省钱好伙伴!吼吼吼! 本文里面顶着男猪脚光环的就是楼下这个胖子啦,艺名:鲁胖子 某天,楼主发现相机没有无线遥控器,太不方便了撒,买又太贵老。遂找鲁胖子商量,答曰小菜,于是搞之。 不知道他去哪里找了两个小灯泡(还真不清楚这玩意儿叫啥)? 加上一根在他们公司垃圾桶里翻出来的报废塑料软管 还有一个不知道哪个设备又被他拆了以后,撤下来的零件 估计左焊焊,右焊焊,yeah~~音频信号转红外信号的遥控器出来了。 硬件就这么愉快的搞定了,插在iphone上就能用。软件也早就去app store下好了 好了,剩下就是测试无线遥控效果了,好使。 就这么欢乐地省下了买无线遥控器的钱,以后出门遥控器能忘,手机还能忘嘛。。。除非又被摸走了,我勒个去。 哦对,我猜,他用申通快递邮给我的费用,比原料贵

Compile and Install LAMP(Linux/Apache/MySQL/PHP) from source on Ubuntu 12.10

This blog will guide you finish the compiling and installing a LAMP Server from source on Ubuntu step by step. Of course, it will take you a little much time(Thanks for the 15 source packages ) ,so a cup of coffee will be a good choice 🙂 Zeroth. Here follows some source packages, which will […]

Ubuntu下PHP扩展cURL

开发php的时候遇到一个错误, Fatal error: Call to undefined function curl_init() Google了一下,网上基本都是你抄我,我抄你,还不能解决,我勒个擦。还是自己动手吧,结合以前经验,解决方法如下: 0. 前提。我的php开发环境是用源码包编译、安装而成的。并且保留了php的源码包。 1. 安装cURL。 1.1 进入/usr/local/src目录,命令如下: $ cd /usr/local/src 1.2 下载cURL源码包,可以通过命令下载,也可以直接去http://curl.haxx.se/download/选择版本下载,然后copy到该目录。如果是敲命令,如下: $ sudo wget http://curl.haxx.se/download/curl-7.17.1.tar.gz 1.3 配置。在当前目录下执行命令: $ sudo ./configure –prefix=/usr/local/curl 1.4 编译,命令如下: $ sudo make 1.5 安装,命令如下: $ sudo make install 如果安装成功以后,在/usr/local/curl/目录下将生成bin、include、lib和share四个目录。 2. 扩展php。 2.1 进入php源码包(不是安装以后的)位置/ext/curl/目录,我的在/usr/local/src/php-5.3.22/ext/curl,如下图所示 2.2 在当前目录下,通过phpize可以建立php的外挂模块,命令如下: $ sudo /usr/local/php/bin/phpize 其中/usr/local/php/是我的php安装路径,有可能与各位不一样。 2.3 配置扩展,命令如下: $ sudo ./configure –with-php-config=/usr/local/php/bin/php-config […]

Ubuntu搭建LAMP环境(jpeg-6b 安装错误 ,找不到libtool命令)

继续安装php开发环境, jpeg-6b make的时候错误: ./libtool –mode=compile gcc -O2 -I. -c ./jcapimin.c make: ./libtool: Command not found make: *** [jcapimin.lo] Error 127 看提示应该是没有安装libtool,由于才拿到手里的服务器,什么都没装,出现这个错误也正常。 解决办法:安装libtool 1 在上面的链接或者网上下载 libtool-2.2.6a.tar.gz,放到/usr/local/src/目录下,解压软件包到当前目录libtool-2.2.6下,并进入libtool-2.2.6目录,命令如下: $ cd /usr/local/usr/                                      // 进入源码包所在目录 $ sudo tar zxvf libtool-2.2.6a.tar.gz        […]