前言: 自己对Linux开发这一块完全不了解,最近因为一些项目开始着手了解,中间查了很多东西,怕自己不用以后忘了又找不到,就把重点记录一下,细节请点击下面提供的参考链接!
文章目录
Linux命令
多用多积累,不懂就查
Linux命令大全(手册)_Linux常用命令行实例详解_Linux命令学习手册
查看Linux下程序所依赖的库
ldd **** 注:配合grep更加,如 ldd caffe.bin | grep opencv
readelf -a ****|grep library
查看Linux下函数/命令定义的位置
man 1 *** 命令
man 2 *** 系统函数
man 3 *** 库函数
GCC
我们通常所说的编译一般分为四步,预处理、编译、汇编、链接
命令选项
生成动态库和静态库:
- 生成动态库:
gcc -c -fPIC test.c -o test.o
gcc -shared test.o libtest.so
# 或者直接一步到位
gcc -shared -fPIC test.c -o libtest.so
- 生成静态库:
gcc -c test.c -o test.o
ar rcs -o libtest.a test1.o test2.o
Makefile入门
网上资料很多,这提供一些我认为能快速入门的资料,不会照搬内容到这个博客,遇到一些没有见过的用法,再去查即可。
参考资料
- 了解Makefile规则:
跟我一起写Makefile — 跟我一起写Makefile 1.0 文档
跟我一起写Makefile:MakeFile介绍 - Ubuntu中文 - 深入理解Makefile:
GNU make
重点语法
- 常用变量
- 自动化变量
$@
:表示规则中的目标文件集$<
: 依赖目标中的第一个目标名字$^
:所有的依赖目标的集合
- 预设变量
CC
: C语言编译程序CXX
: C++语言编译程序CFLAGS
: C语言编译器参数CXXFLAGS
: C++语言编译器参数
- 自动化变量
- 常用的函数有:
wildcard
,patsubst
,addprefix
# 返回当前目录中所有指定后缀的文件列表 SRC = $(wildcard *.cpp) DEPS = $(wildcard *.h) # 通过在SRC中用'.o'替换'.cpp'后缀,将CPP源文件列表更改为目标文件列表 OBJ = $(patsubst %.cpp,%.o,$(SRC)) # 添加前缀 OBJS = $(addprefix $(OBJDIR), $(OBJ))
C++和C混合编程
C++调用C函数
-
不用.h头文件,如果要在.cpp中调用.c,则在.cpp声明部分加上,如下代码:
// C++ cpp code extern "C" { int test();//.c中你想要调用的函数 }
-
用.h头文件,可将.h声明函数部分放入以下格式中:
// C++ Header Code #ifdef __cplusplus extern "C" { #endif .......//放在这个部分即可 #ifdef __cplusplus } #endif
C函数调用C++
// C++ cpp code
extern "C" int foo(){
....
}
// 同理也可在C++ Header code中声明
参考链接
3.C++和C混合编程 - 夜行过客 - 博客园
C代码中如何调用C++ C++中如何调用C - Yogurshine - 博客园
C++项目中的extern “C” {} - 吴秦 - 博客园