典型例子
makefile内容如下:
main : main.cpp
g++ -o main main.cpp -std=c++11 -g `sdl2-config --cflags --libs` -I./includes -L./lib -ldtypestd -Wl,-rpath ./lib
分析:
-std=c++11 指定用c++11标准
-g 表示可以用gdb调试
-I 指定头文件包含目录
-L 指定编译时依赖的动态库
-l 指定具体依赖的去头掐尾库名称
-Wl,-rpath 为运行库添加一个搜寻目录
-m32 指定生成x86架构目标,即32位
-m64 指定生成x86_64架构目标,即64位
-shared -fPIC 指定生成动态库
-DLINUX 指定LINUX宏定义
`...`
编译参数
链接参数
关于头文件
搜索-l指定目录,搜索环境变量CPLUS_INCLUDE_PATH指定目录,搜索编译器内定目录。
(环境变量添加目录如下:
export CPLUS_INCLUDE_PATH=XXX:$CPLUS_INCLUDE_PATH
)
( 编译器内定目录如下:
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.8/include
)
( 另外冒号引用的头文件会先搜索当前目录)
关于链接库
库搜索环境变量LD_LIBRARY_PATH
ln -s <库> <类似快捷方式>
ldconfig -n <目录> 生成so文件的软连接
ldd <库> 或 ldd <执行体> 查看库和执行体之间的依赖关系
readelf -h *.so 显示elf文件的头(magic字段第五个字节,01代表32位,02代表64位)
readelf -d *.so 显示so文件动态区域信息(soname信息)
顺序是前面依赖后面库
关于库模块
pkg-config来管理库模块,注意通过 /usr/lib/pkgconfig/和PKG_CONFIG_PATH中寻找*.pc文件;
模块搜索环境变量PKG_CONFIG_PATH(搜索所有*.pc)
pkg-config <模块名> --cflags --libs
关于多编译器
查看版本
gcc -v
g++ -v
查看编译器支持GLIBCXX 和 GLIBC版本
strings /usr/lib/gcc/x86_64-linux-gnu/5.4.0/libstdc++.so | grep GLIBC
安装
sudo apt-get install gcc-4.8 g++-4.8
配置gcc
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40
选择gcc版本
sudo update-alternatives --config gcc
移除gcc版本
sudo update-alternatives --remove gcc /usr/bin/gcc-4.8
配置g++
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
选择g++版本
sudo update-alternatives --config g++
移除g++版本
sudo update-alternatives --remove g++ /usr/bin/g++-4.8
添加仓库安装gcc6 (https://ftp.gnu.org/gnu/gcc/ https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/)
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-6
集成开发环境
ubuntu 16.04安装codeblocks
sudo add-apt-repository ppa:damien-moore/codeblocks-stable
sudo apt-get update
sudo apt-get install codeblocks codeblocks-contrib
Ubuntu 18.04安装codeblocks
sudo add-apt-repository ppa:pasgui/ppa
sudo apt-get update
sudo apt-get install codeblocks
sudo apt-get install codeblocks-contrib