个人linux下编译c++工程所遇问题汇总

1.相关编译命令

编译c++用g++,需要对c++11的支持:-std=c++11,添加头文件路径:-I,添加库文件路径:-L
例:

g++ -Wall -std=c++11 -IClasses -ILib/rapidjson -ILib/LibEvent -ILib/LibEvent/include Classes/Log.cpp Classes/CachePool.cpp Classes/NetHandlers.cpp Classes/NetManager.cpp main.cpp -o main -L/usr/local/lib -levent

2.libevent编译,安装与使用

1) 官网下载源代码包 libevent-2.0.22-stable.tar.gz(http://libevent.org/)
2) 解压,编译,安装

tar zxvf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure
make
sudo make install

3) 项目中使用
头文件路径引用使用-I,库文件路径引用使用-L,库文件引用使用-l(小写的L),例

g++ -I/usr/local/include main.cpp -o main L/usr/local/lib -levent

遇到问题
libevent-2.0.so.5: cannot open shared object file: No such file or directory
解决:添加对so文件的链接
32位:

ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5

64位:

ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

3.运行

1.后台运行,例:

./main &

2.后台运行,重定向标准输出到 log.file 中

./main > log.file &

3.后台运行,重定向标准输出到 log.file 中,重定向错误输出到 log.file中

./main>log.file 2>&1 &

4.后台运行,重定向标准输出到 log.file 中,重定向错误输出到 log.file中,将程序设置为不挂起,以便远程连接中断后程序可以继续运行

nohup ./main>log.file 2>&1 &

附:

查看该进程命令:ps -ef | grep main
/dev/null :代表空设备文件
> :代表重定向到哪里,例如:echo “123” > /home/123.txt
1 :表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于”1>/dev/null”
2 :表示stderr标准错误
& :表示等同于的意思,2>&1,表示2的输出重定向等同于1,即2>&1表示重定向错误输出到标准输出中

# jobs //查看任务,返回任务编号n和进程号
# bg %n //将编号为n的任务转后台运行
# fg %n //将编号为n的任务转前台运行
# ctrl+z //挂起当前任务
# ctrl+c //结束当前任务

4.调试

1.core文件设置

当某程序崩溃时,内核会抛出当时该程序进程的内存详细情况,会生成core.xxx的文件。我们通过ulimit命令来对core.xxx文件进行相关设置,使用 ulimit -a 命令会列出文件的相关信息

ulimit -a

使用ulimit -c 10来设置生成文件大小为10段(blocks),或者用unlimited设置为无限大

ulimit -c 10

2.生成core文件

程序崩溃时就会自动生成core.xxx的文件

3.调试core文件

首先确认安装了gdb,如果没有使用aptitude install gdb或apt-get install gdb 装上

aptitude install gdb

使用gdb core.xxx文件进行调试,例

gdb core.1234

附:详细文档
http://wiki.ubuntu.org.cn/index.php?title=%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F&variant=zh-hans

你可能感兴趣的:(个人linux下编译c++工程所遇问题汇总)