Linux
文章平均质量分 65
nodeathphoenix
这个作者很懒,什么都没留下…
展开
-
Compiling OpenSSL on Linux
OpenSSLOpenSSL is a replacement forSSLeay secure socket layer.This document reflects my real-world experience in buildingOpenSSL 0.9.4 (~1.6M) on a Slackware 4.0 Linux 2.2.10 box. A new version ap转载 2014-04-16 17:31:40 · 990 阅读 · 0 评论 -
linux API 判断目录是否存在
//create folderstruct stat statbuf;if ( 0 != stat("./myfolder",&statbuf)) //If failed to get the status of this directory{ if原创 2011-08-04 23:09:26 · 3037 阅读 · 0 评论 -
linux 调用动态库so文件
关于动态调用动态库方法说明 一、 动态库概述 1、 动态库的概念 日常编程中,常有一些函数不需要进行编译或者可以在多个文件中使用(如数据库输入/输出操作或屏幕控制等标准任务函数)。可以事先对这些函数进行编译,然后将它们放置在一些特殊的目标代码文件中,这些目标代码文件就称为库。库文件中的函数可以通过连接程序与应用程序进行链接,这样就不必在每次开发程序时都对这些通用的函数进转载 2012-05-02 14:55:09 · 40102 阅读 · 0 评论 -
避免物理内存碎片化
转以前的项目碰到了buddy内存分配失败的情况,虽然当前可用内存和可回收内存还有很多,但是仍然无法满足分配,经过分析是物理内存碎片化导致申请连续物理内存失败。 当linux系统持续运行很长时间没有重新启动后,系统内持续的进行页面的分配和释放,系统空闲物理内存被使用的物理内存分割开,大块的连续物理内存为0,空闲页面只能满足小数量页面的分配,此时系统可能还有很多空闲页面,但是buddy转载 2014-07-07 10:32:04 · 1246 阅读 · 0 评论 -
g++和gcc的比较
gcc和g++都是GNU(一个组织)的编译器。1、对于.c后缀的文件,gcc把它当做是C程序;g++当做是C++程序;2、对于.cpp后缀的文件,gcc和g++都会当做c++程序。3、编译阶段,g++会调用gcc;4、连接阶段,通常会用g++来完成,这是因为gcc命令不能自动和c++程序使用的库连接。 gcc可以用来编译c++但是它不会自动调用链接的c++库,你需要自己手动链接转载 2012-12-06 03:09:40 · 10875 阅读 · 0 评论 -
如何获得gcc/g++编译宏定义和头文件搜索目录的方法说明
/* co-gcc.lnt: This is the seed file for configuring Lint for use withGCC versions 2.95.3 and later.Like all compiler options files this file is intended to be usedas follows:lint co-gcc.l转载 2014-04-24 14:48:56 · 3257 阅读 · 0 评论 -
gdb使用小结
step和next都是单步执行代码,但是单步执行到函数时就有点不同了,step是会进入到函数里面的第一行代码;而如果该函数里面没有设置断点,则next会跳过该函数,直接执行该函数后面的下一行代码,如果函数里面设置了断点,则next会直接跳到该函数内的断点处。step:single step the program; step into functionsnext:原创 2013-07-24 17:33:08 · 728 阅读 · 0 评论 -
debian软件源source.list文件格式说明
在安装完debian操作系统之后大家做的第一件事大概就是修改source.list文件了吧,否则你是无法在线更新软件的,那么source.list文件中的各个配置项的具体含义你搞懂了么?下面就以我的source.list文件为例为大家讲解一下。deb http://mirrors.163.com/debian/ wheezy main non-free contribdeb http:/转载 2014-01-07 14:20:54 · 15901 阅读 · 0 评论 -
Linux API和c运行时库等关系
1.系统调用与POSIX系统调用是用户应用程序访问并使用内核所提供的各种服务的途径。但通常情况下,应用程序不是直接通过系统调用来编程,而是通过操作系统提供的编程接口(API)。操作系统API的主要作用是把操作系统的功能打包并更好的展示出来,供应用程序使用,功能包括,与文件内存、时钟、网络、图形、各种外设等互操作的能力。除此之外,API还提供许多工具类的功能,比如操纵字符串、各种转载 2013-09-11 10:46:22 · 2278 阅读 · 0 评论 -
Sudo
查看了man sudo,也在网上找了些资料。但是感觉说的还是不够全或是准确,不能解答自己所有的疑问。自己结合这些资料,亲自动手实验后总结了如下心得。 Sudo的作用,资料太多了,就不详细说了。简单地说,主要作用就是有root权限的admin可以不告诉普通用户root的密码,而能让该用户使用root权限执行部分或者所有的命令或是操作。怎么做到这点呢?就是在/etc/sudoers中设置普原创 2012-11-23 16:21:59 · 588 阅读 · 0 评论 -
makefile 续
gcc有参数可以把源文件的依赖关系全部导出来,比如: -bash:~$gcc -MM main.c 输出:main.o: main.c main.h 使用 -MM参数是只导出自定义头文件,-M则会把系统头文件也导出来。以下是一个自动生成头文件依赖的Makefile:转载 2011-08-10 23:36:27 · 804 阅读 · 0 评论 -
Linux shared library usage detail
Linux 如何解决共享库的版本控制 (换句话说,soname不是真实存在的文件,只是在此库中和将来调用此库的文件中保存的一个名字,在加载是去找这个名字,使用时创建一个软连接来指向真实文件,这样真实文件的版本号就可以升级了)换句话说,soname不是真实存在的文件,只是在此库中和将来调用此库的文件中保存的一个名字,在加载是去找这个名字,使用时创建一个软连接来指向真实文件,这样真实文件的版本转载 2011-10-28 17:21:56 · 3319 阅读 · 0 评论 -
C 标准库
C 标准库其实是一个标准。glibc 基于类unix系统的运行时库(是由一些列的库组成),它除了实现C标准库之外,还包含POSIX API。一个具体的表现是它包含了unistd.h。glibc中某些c标准库函数同时也是POSIX API。msvcrt 是一个微软的基于Windows的C运行时库。它除了实现C标准库之外,还部分添加了一些功能。例如它包含了process.h。转载 2012-12-12 21:07:52 · 1363 阅读 · 0 评论 -
Shell 变量用双引号
Shell 变量用双引号引起来,双引号就是表示这个双引号内为一个字符串。对于 if 条件语句里所有的字符串的比较时,最好是在变量的外面加上双引号。特别是 if -n 判断字符串是否为null时候(null意思就是字符串长度为0),一定要加上双引号。否则,像下面的case就会出错。a=""if [ -n $a ] 等价于 if[ -n ]对于字符串长度为0时,相当于没有参数,这句总原创 2013-05-29 15:19:02 · 17724 阅读 · 1 评论 -
Linux 依赖动态库 / 静态库的动态态库 / 静态库
libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而main.exe又调用了libfun.so的函数int nothing()。 下面两种方式都能工作:1> 常用的方式g++ -shared -fPIC -olibtest.so test.cppg++ -shar原创 2013-08-15 13:53:11 · 11824 阅读 · 0 评论 -
LINUX 静态库,共享库
通常库分为:静态库,共享库,动态加载库,。下面分别介绍。一、 静态库:1.概念: 静态库就是一些目标文件的集合,以.a结尾。静态库在程序链接的时候使用,链接器会将程序中使用 到函数的代码从库文件中拷贝到应用程序中。一旦链接完成,在执行程序的时候就不需要静态库了。 由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以静态链接的文件会比较大。2.创建与转载 2011-07-06 10:15:08 · 912 阅读 · 0 评论 -
Ubuntu 14.04.1 LTS上编译安装新的kernel
先cd到欲编译的kernel source code的根目录linux-3.15.8,然后copy当前ubuntu系统中的内核配置为新的kernel的内核配置 cp /boot/config-3.13.0-32-generic ./.config sudo make oldconfig sudo make -----不加任何参数直接make,原创 2014-08-04 07:16:59 · 12195 阅读 · 0 评论 -
Diff命令详解
<br />Diff命令 <br /> <br /> 该命令的功能为逐行比较两个文本文件,列出其不同之处。它比comm命令完成更复杂的检查。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。 <br /> <br /> 语法:diff [选项] file1 file2 <br /> <br /> 说明:该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用“- ”表示file1或fiie2,则表示标准输入。如果file1或file2转载 2010-12-01 17:54:00 · 5485 阅读 · 0 评论 -
链接器如何使用静态库来解析引用
链接器如何使用静态库来解析引用在符号解析(symbol resolution)阶段,链接器按照所有目标文件和库文件出现在命令行中的顺序从左至右依次扫描它们,在此期间它要维护若干个集合:(1)集合E是将被合并到一起组成可执行文件的所有目标文件集合;(2)集合D是所有之前已被加入E的目标文件定义的符号集合;(3)集合U是未解析符号(unresolved symbols,即那些被E中目标文件引用过但转载 2010-11-29 22:06:00 · 2598 阅读 · 0 评论 -
linux下一般程序运行时查找动态库的顺序
linux下一般链接时程序查找动态库的顺序为:a.根据环境变量LD_LIBRARY_PATH查找b.根据/etc/ld.so.cache查找c.查找依次在/lib和/usr/lib目录查找。a 举例:由于动态库的链接和运行时的目录是分开指定的,所以编译通过后,运行时boost库找不到的问题存在于当前工程中。解决办法就是设置外环境变量LD_LIBRARY_PATH:#原创 2013-08-01 17:08:12 · 9562 阅读 · 0 评论 -
Linux内核高端内存
Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下图。 Linux内核地址空间划分通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。 Linux内核高端内存转载 2013-06-25 11:32:58 · 670 阅读 · 0 评论 -
汇编语言中使用有符号数还是无符号数问题
一、只有一个标准!在汇编语言层面,声明变量的时候,没有 signed 和 unsignde 之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到计算机中,只有这一个标准!汇编器不会区分有符号还是无符号然后用两个标准来处理,它统统当作有符号的!并且统统汇编成补码!也就是说,db -20 汇编后为:EC ,而 db 236 汇编后也为 EC 。这里有一个小问题,思考深入的朋友会发现,转载 2013-06-03 17:57:06 · 1581 阅读 · 0 评论 -
libcurl入门
原文地址:http://blog.csdn.net/jgood/article/details/4787670 译者注:这是一篇介绍如何使用libcurl的入门教程。文档不是逐字逐句按原文翻译,而是根据笔者对libcurl的理解,参考原文写成。文中用到的一些例子,可能不是出自原文,而是笔者在学习过程中,写的一些示例程序(笔者使用的libcurl版本是:7.19.6)。出现在这里主要是为转载 2013-05-31 16:09:34 · 1581 阅读 · 0 评论 -
linux程序同时链接动态库与静态库
一在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。使用方式为:gcc test.cpp -L. -ltestlib如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接静态库则使用:gcc test.cpp -L. -static -ltestli转载 2013-06-08 18:33:11 · 13864 阅读 · 1 评论 -
ELF文件格式
ELF简介ELF 是由USL(UNIX System Laboratories)作为ABI(Application Binary Interface) 的一部分发布的。ELF 为开发者提供了一整套能应用于多个操作系统的二进制接口定义,在软件移植时大大减少了需要重新编码和编译的地方。ELF 同时支持二进制文件的三种用途,并根据这三种用途分别定义了相应的ELF 文件类型:可重定位文件(reloca转载 2013-05-03 15:00:27 · 892 阅读 · 0 评论 -
交叉编译器的使用方法
使用方法跟本地的gcc差不多,但有一点特殊的是:必须用-L和-I参数指定编译器用spar c系统的库和头文件,不能用本地(如X86)的库和头文件。例子:sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib-I/path/to/sparcInclude转载 2013-03-13 17:08:46 · 1368 阅读 · 0 评论 -
Linux 编程中的API函数和系统调用的关系
API:(Application Programming Interface,应用程序编程接口) 指的是我们用户程序编程调用的如read(),write(),malloc(),free()之类的调用的是glibc库提供的库函数。API直接提供给用户编程使用,运行在用户态。 我们经常说到的POSIX(Portable Operating System Interface of Unix)转载 2013-03-06 17:41:46 · 1111 阅读 · 0 评论 -
虚拟机(Virtualbox-Ubuntu)与主机(WIN7)共享文件夹设置
虚拟机(Virtualbox-Ubuntu)与主机(WIN7)共享文件夹设置 环境:win7: 32 位旗舰版 VM: sun vitualbox Linux:ubuntu 12.04;1、设置共享文件夹 1.1 设备->共享文件夹,点击【添加共享文件夹】按钮。 1.2 添加共享文件夹路径和共享文件夹名称。此处D:\GoogleDownLoa转载 2013-07-24 14:45:16 · 1552 阅读 · 0 评论 -
常用的宏
编码的时候经常要用到条件编译,每次都到网上去查比较浪费时间,今天总结一下以备后用 编译器 GCC#ifdef __GNUC__#if __GNUC__ >= 3 // GCC3.0以上 Visual C++#ifdef _MSC_VER(非VC编译器很多地方也有定义)#if _MSC_VER >=1000 // VC++4.0以上 #if _MSC_转载 2013-08-10 20:41:25 · 716 阅读 · 0 评论 -
debian查看版本信息
(1)lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux lenny/sid Release: lenny/sid Codename: n/a (2)uname -a Linux debian转载 2014-01-22 17:06:57 · 19694 阅读 · 0 评论 -
可执行程序的段
可执行程序的段:1、文本段:包含程序的指令,它在程序的执行过程中只读的,不会改变。2、数据段:包含了经过初始化的静态变量和经过初始化的全局变量。3、BSS段: 包含未经初始化的全局变量和静态变量。4、堆栈段:包含了函数内部声明的局部变量。注意,可执行文件是不会有局部变量的空间,因为它们要等到执行后在进程的stack区动态创建。可以用nm导出符号表来查看变量是否转载 2013-09-25 14:07:36 · 1531 阅读 · 0 评论 -
Gdb core调试技术
做c方面的开发,免不了要是用gdb来调试程序,最近也是在公司做的时候时常需要使用gdb来分析程序,使用最多的当属使用core来查看程序运行的crash原因。在linux中应用程序运行奔溃之后一般会产生core文件,core文件是core dump来产生,core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中。要转载 2014-01-07 16:26:47 · 970 阅读 · 0 评论 -
GCC执行过程简介
1、简介 虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。 命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(includ转载 2013-12-30 16:42:39 · 1551 阅读 · 0 评论 -
GCC Command Options
内容主要来自gcc官网,据此可以详细了解gcc的编译选项的含义。Entrance is as below:http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Invoking-GCC.html#Invoking-GCCKind of output options:http://gcc.gnu.org/onlinedocs/gcc-4.7.原创 2013-12-30 16:32:29 · 789 阅读 · 0 评论 -
gcc和cc
1 什么是GCC和gcc?GCC是由GNU之父Stallman所开发的linux下的编译器,GCC最初的全名是GNU C Compiler,之后,随着GCC支持的语言越来越多,其全称变为GNU Compiler Collection,即GNU编译器集合。目前可以编译的语言包括:C, C++, Objective-C, Fortran, Java, and Ada。gcc转载 2013-10-11 18:20:19 · 3003 阅读 · 0 评论 -
Linux_数据段、代码段、堆栈段、BSS段的区别
5个数据段 进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。Linux进程的五个段下面我们来简单归纳一下进程对应的内存空间中所包含的5种转载 2013-09-11 16:21:55 · 1074 阅读 · 0 评论 -
中断解析
一、中断是什么中断的汉语解释是半中间发生阻隔、停顿或故障而断开。那么,在计算机系统中,我们为什么需要“阻隔、停顿和断开”呢?举个日常生活中的例子,比如说我正在厨房用煤气烧一壶水,这样就只能守在厨房里,苦苦等着水开——如果水溢出来浇灭了煤气,有可能就要发生一场灾难了。等啊等啊,外边突然传来了惊奇的叫声“怎么不关水龙头?”于是我惭愧的发现,刚才接水之后只顾着抱怨这份无聊的差事,居然忘了这事,于转载 2013-03-06 17:01:08 · 878 阅读 · 0 评论