下面的编译是我摘抄的交叉编译器编译的选项,我们来逐行分析每个编译选项
GCC常用库文件:
dl库包含,库文件操作函数.是显式加载动态库的动态函数库,如dlopen dlclose,等等
m库,math数学计算库文件
-lz 压缩库(Z)
-lc 标准C库(C lib)
arm-linux-gnueabihf-g++
-c //编译、汇编到目标代码,不进行链接--查看最后一行生成的.o文件
-pipe //使用管道代替临时文件--编译过程不生成中间文件用管道方式
-O2 /*O0不优化(默认)
O1优化会消耗少多的编译时间,它主要对代码的分支,常量以及表达式等进行优化。
O2会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间。
O3在O2的基础上进行更多的优化,例如使用伪寄存器网络,普通函数的内联,以及针对循环的更多优化*/
-march=armv7-a //cpu-type
-mtune=cortex-a7
-mfpu=neon
-mfloat-abi=hard
-O2
-DLINUX=1
-std=gnu++11 //Determine the language standard;GNU dialect of -std=c++11.
-Wall //turns on the following warning flags 开启所有的报警
-W
-D_REENTRANT
-fPIC //生成与位置无关的代码 好像只在生成库文件有用
-DQT_NO_DEBUG //Predefine name as a macro, with definition 1
-DQT_WIDGETS_LIB
-DQT_GUI_LIB
-DQT_CORE_LIB
-I../untitled2
-I.
-I/opt/qt5.12.7_ssd/include
-I/opt/qt5.12.7_ssd/include/QtWidgets
-I/opt/qt5.12.7_ssd/include/QtGui
-I/opt/qt5.12.7_ssd/include/QtCore
-I.
-I.
-I/opt/qt5.12.7_ssd/mkspecs/linux-ssd -o main.o ../untitled2/main.cpp
[翻译]15个最常用的GCC编译器参数
Sqlite3 下载
Sqlite3 编译:官方指导
Sqlite3 编译:选项推荐
1.命令行工具Sqlite3
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c -o sqlite3 $CC -c -pipe -std=c++0x -O3 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard -DLINUX=1 -Wall -W -fPIC shell.c sqlite3.c -lpthread -ldl -lm -o sqlite3
2 静态库文件,优点:不用再rootfs中增加sqlite的so库文件,嵌入式编译环境不用移植sqlite,缺点:最终文件变大,静态库相对于动态不需要”-fPIC -shared”
$CC -c -std=c++0x -O3 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard -DLINUX=1 -Wall -W -lpthread -ldl -lm sqlite3.c -o sqlite3.o arm-linux-gnueabihf-ar rcs libsqlite3.a sqlite3.o
3 动态库文件,编译最终文件时不用每次都要吧静态库需要的依赖库再次引用
$CC -std=c++0x -O3 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard -DLINUX=1 -Wall -W -fPIC -shared sqlite3.c -lpthread -ldl -lm -o libsqlite3.so
4 直接使用,直接使用和静态库有点类似 优点:没有移植问题,拿来就用,缺点,首次编译时间变长,如果误修改源文件可能造成不可靠后果