普通Compile需要gcc或g++ , 格式为
CXX -DHAVE_CONFIG -I/usr/include -L/usr/lib -l<libname> -g(debug level) -O(optimization level) -o <输出名字>
CXX参数:
定义宏 | -D<macro> | 取消宏 | -U<macro> | 指定头文件目录 | -I<dir> |
指定库文件目录 | -L<dir> | 指定库文件 | -l<lib> | 包括最多gdb调试信息 | |
文件 | 命令 | gcc选项 | 功能 |
---|---|---|---|
.c -> .i | cpp | -E | 预处理:展开宏 |
.i -> .s | egcs | -S | 编译:语法,语义分析,生成汇编文件 |
.s -> .o | as | -c | 汇编:Assembly生成机器码 |
.o -> .out | ld | -L | 链接:链接库文件 |
make
make -n 查看编译指令
查看符号
nm -Do /usr/lib64/libstdc++.so 查看 .dynsym
nm /usr/lib64/libstdc++.so 查看 .symtab
Build
生成Makefile
./configure --prefix=<install_folder>
cmake -DCMAKE_INSTALL_PREFIX=<install_folder> -DBUILD_SHARED_LIBS=ON
环境变量
LIBRARY_PATH 编译期间查找静态链接
LD_LIBRARY_PATH 运行时查找动态链接
undefined reference to 的可能原因:
1 缺失目标文件.o或库文件.so
2 链接顺序错误,符号按先后顺序读取
3 c++中引用c代码
4 不同的gcc版本