项目开发日报表 | |
项目名称 | 苏嵌实训—嵌入式LinuxC第n天 |
今日进度以及任务 | 1:编译器三级优化分别优化了哪些? 2:总结gcc静态库和动态库的制作 3:总结Cmake的制作 |
本日任务完成情况 | 1:编译器优化级别1 是在优化的第一个级别执行基础代码的优化(-fdefer-pop,-fmerge-constans,-fthread-jumps,-floop-optimize,-fif-conversion,-fif-conversion2,-fdelayed-branch,-fguess-branch-probability,-fcprop-registers);编译器优化级别2是结合了第一个级别的所有优化技术, 再加上以下一些优化(-fforce-mem-foptimize-sibling-calls,-fstrength-reduce,-fgcse,-fcse-follow-jumps,-frerun-cse-after-loop,-fdelete-null-pointer-checks, -fextensive-optimizations,-fschedule-insns, -fsched-interblock,-fcaller-save,fpeephole2,-freorder-blocks,-fstrict-aliasing,-funit-at-a-time,-falign-functions,-fcrossjumping);编译器优化级别3 整合了第一和第二级别中的左右优化技巧, 还包括一下优化(-finline-functions,-fweb,-fgcse-after-reload) 2:静态库:第一步:生成test.o目标文件,使用gcc -c test.c -o test.o命令。 第二步:使用ar将test.o打包成libtest.a静态库,使用ar rcs -o libtest.a test.o命令 第三步:生成libtest.a静态库后,可以使用命令ar t libtest.a查看libtest.a文件中包含哪些文件。 第四步:编译main.c,并使用libtest.a静态库,链接时-l参数后不加空格指定所需要链接的库,这里库名是libtest.a,但是只需要给出-ltest即可,ld会以libtest作为库的实际名字。完整的命令为:gcc -o app_static main.c -L. -ltest 或者是gcc -o app_static main.c libtest.a 第五步:运行app_static 动态库:第一步:生成test.o目标文件,使用如下命令。在此处需要添加-fPIC参数,该参数用于生成位置无关代码已工生成动态库使用,使用命令:gcc -c -o test.o -fPIC test.c 第二步:使用-shared参数生成动态库,使用如下命令:gcc -shared -o libmyshare.so test.o,上述两个命令可以连在一起,如下所示:gcc -shared -fPIC -o libmyshare.so test.c 第三步:编译main.c,使用libmyshare.so动态库,命令如下gcc -o app_share main.c -L. -lmyshare.使用ldd app_share命令查看app_share使用动态库,如果libmyshare无法找到,直接执行app_share就会出现错误。解决方法:首先使用export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH将当前目录加入LD_LIBRARY_PATH变量中。再次运行ldd app_share 3:首先下载Cmake;下载地址http://www.cmake.org/cmake/resources/software.html 安装Cmake:随便找个目录解压缩 tar -xzvf cmake-2.6.4.tar.gz cd cmake-2.6.4 依次执行 ./bootstrap make make install cmake 会默认安装在 /usr/local/bin 下面 第一布为项目代码建立目录hello,与此项目有关的所有代码和文档都位于此目录下。 第二步,在hello目录下建立一个main.c文件,其代码如下: #include int main(void) { printf(”Hello,Worldn”); return 0; } 第三步,在hello目录下建立一个新的文件CMakeLists.txt,它就是 cmake所处理的“代码“。其实,使用cmake管理项目本身也是在编程,所以称之为“代码(或脚本)”并不为过。在CMakeLists.txt文件中输入下面的代码(#后面的内容为代码行注释): #cmake最低版本需求,不加入此行会受到警告信息 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(HELLO) #项目名称 #把当前目录(.)下所有源代码文件和头文件加入变量SRC_LIST AUX_SOURCE_DIRECTORY(. SRC_LIST) #生成应用程序 hello (在windows下会自动生成hello.exe) ADD_EXECUTABLE(hello ${SRC_LIST}) 至此,整个hello项目就已经构建完毕,可以进行编译了。 第四步,编译项目。 为了使用外部编译方式编译项目,需要先在目录hello下新建一个目录build(也可以是其他任何目录名)。现在,项目整体的目录结构为: hello/ |– CMakeLists.txt |– build / `– main.c 在windows下,cmake提供了图形界面,设定hello为source目录,build为二进制目录,然后点击configure即可开始构建,之后进入build目录运行make命令编译。 在linux命令行下,首先进入目录build,然后运行命令(注:后面的“..”不可缺少): 该命令使cmake检测编译环境,并生成相应的makefile。接着,运行命令make进行编译。编译后,生成的所有中间文件和可执行文件会在build目录下。 |
本日开发中出现的问题总汇 | 命令行不理解不会使用;英文不好很多命令无法理解及使用;cmake不理解其含义 |
本日未解决问题 | CentOS下网页下载安装包网速及其慢,只有几kb/s |
本日开发收获 | 静态库与动态库的关系;Cmake的优势等 |
其他 | 东西太多时间太急无法吸收与理解 |