前言: 自己對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” {} - 吳秦 - 博客園