C++静态库与动态库
最后发布时间:2020-07-22 16:40:06
浏览量:
-
在Windows系统下的执行文件格式是PE格式,动态库需要一个DllMain函数做出初始化的入口,通常在导出函数的声明时需要有_declspec(dllexport)关键字。
-
Linux下gcc编译的执行文件默认是ELF格式,不需要初始化入口,亦不需要函数做特别的声明,编写比较方便。
-
对于elf格式的可执行程序,是由ld-linux.so*来完成的,它先后搜索elf文件的 DT_RPATH段—环境变量LD_LIBRARY_PATH—/etc/ld.so.cache文件列表—/lib/,/usr/lib 目录找到库文件后将其载入内存。
https://www.cnblogs.com/king-lps/p/7757919.html
GDB 调试
-
gcc main.c -g
-
gdb a.out
-
gdb
-
run
运行程序 -
break
设置断点
项目管理工具
autoconf、automake
Linux工具之autogen.sh`
makefile基础配置
main:main.o printMap.o
g++ main.o printMap.o -o main
main.o:main.cpp
g++ -c main.cpp -o main.o
printMap.o:printMap.cpp
g++ -c printMap.cpp -o printMap.o
clean:
rm *.o main
在目录中的源文件
.
├── foo
│ └── foo.cpp
├── foo.o
├── main
├── main.cpp
├── main.o
├── Makefile
├── printMap.cpp
└── printMap.o
.PHONY:clean
cc = g++
main:main.o printMap.o foo.o
$(cc) main.o printMap.o foo.o -o main
main.o:main.cpp
$(cc) -c main.cpp -o main.o
printMap.o:printMap.cpp
$(cc) -c printMap.cpp -o printMap.o
foo.o:foo/foo.cpp
$(cc) -c foo/foo.cpp -o foo.o
clean:
rm *.o main
通过多个makefile文件
.PHONY:clean
cc = g++
main:main.o printMap.o foo.o
$(cc) main.o printMap.o foo/foo.o -o main
main.o:main.cpp
$(cc) -c main.cpp -o main.o
printMap.o:printMap.cpp
$(cc) -c printMap.cpp -o printMap.o
#foo.o:foo/foo.cpp
# $(cc) -c foo/foo.cpp -o foo.o
foo.o:
cd foo;make
clean:
rm *.o main
库文件
https://www.jianshu.com/p/96c114eb4417
https://github.com/maxrd2/SubtitleComposer/wiki/Building-from-sources