图片alt
在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
gcc main.c -g
gdb a.out
gdb
run 运行程序
run
break设置断点
break
autoconf、automakeLinux工具之autogen.sh`
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/96c114eb4417https://github.com/maxrd2/SubtitleComposer/wiki/Building-from-sources