Mac 通过命令行编译运行C代码 以及生成和调用静态库 以及Makefile实现过程
2016-11-22 10:42
736 查看
1.我们在桌面上创建一个TestX的文件夹
在文件夹下面创建一个main.c的文件 代码都是标准代码
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
}
没什么特别的
2. 编译和运行
命令行转到TestX目录
cd /Users/lidong/Desktop/TestX
执行编译命令
gcc -o main *.c //编译当前目录下所有的.c文件 生成一个main文件
stm-macmini-085:TestX lidong$ gcc -o main *.c
如果有错误编译器会提示错误
运行生成的main文件
执行 ./main
stm-macmini-085:TestX lidong$ ./main
Hello, World! //输出的打印信息
3 调用静态库
在目录下面创建两个文件 test.h test.c 就是个求和的代码
test.h
int add(int x,int y);
test.c
#include <stdio.h>
#include "test.h"
int add(int x,int y){
return x+y;
}
1)执行 gcc -Wall -c test.c 会生成一个test.o的文件
stm-macmini-085:TestX lidong$ gcc -Wall -c test.c
2)执行ar -cvq lib.a *.o 生成lib.a文件
stm-macmini-085:TestX lidong$ ar -cvq lib *.o
q - test.o
显示lib.a里面包涵的.o文件可以通过命令:
ar -t lib.a //ar 创建静态库命令
stm-macmini-085:TestX lidong$ ar -t lib.a
__.SYMDEF SORTED
test.o
3)调用静态链接库
删除文件夹里面的test.c文
修改main.c如下
#include <stdio.h>
#include "test.h"
int main()
{
printf("Hello, World!\n");
printf("%d\n",add(3,3));
return 0;
}
执行命令 gcc -o newmain *.c *.a
stm-macmini-085:TestX lidong$ gcc -o newmain *.c *.a
运行newmain文件:./newmain
stm-macmini-085:TestX lidong$ ./newmain
Hello, World!
6
调用成功
需要用到文件夹分开 通过以下下方式
$ gcc -o newmian file1.c file2.c ../util/libtestl.a
或者 $ gcc -o newmian file1.c file2.c -L../util/ -ltest
我们用Makefile来实现上面的过程 创建一下Makefile文件
代码如下: (注意Makefile冒号后要空一格 命令要tab)
start : test.o libtest.a clear main
./main
test.o :
gcc -Wall -c test.c
libtest.a :
ar -cvq libtest.a *.o
main :
gcc -o main main.c *.a
clear :
rm test.o
在该目录下
执行make
stm-macmini-085:TestX lidong$ make
rm test.o test.c
gcc -o main main.c *.a
./main
Hello, World!
6
stm-macmini-085:TestX lidong$
相关文章推荐
- CMake+vs2010实现对CMVS-PMVS源代码的编译运行,以及实现与bundler之间的相互调用
- windows7下实现Bundler并通过cygwin编译运行以及pmvs、cmvs的使用(2)
- openwrt 问题二 js 通过nginx 服务器调用 lua代码的过程实现
- C、C++的Makefile的编写以及动、静态库的制作调用(包括MAC地址的获取及MD5加密)
- mac os/Linux 下命令行C/C++/Java代码编译+运行方法
- C、C++的Makefile的编写以及动、静态库的制作调用(包括MAC地址的获取及MD5加密)
- 通过编译时注解生成代码实现自己的ButterKnife
- 嵌入式开发之makefile---交叉编译静态库和动态库的生成和调用
- g++编译运行c++代码流程以及动态库静态库的创建与使用
- 关于Mac下编译ffmpeg静态库供framework或者dylib调用出现illegal text-relocoation代码重定向问题
- 简谈用g++编译运行c++代码流程,以及动态库静态库的创建与使用
- c#调用js,以及js调用C#里的函数, c#自己生成js代码,实现对web的控制
- 私话编译连接运行过程以及动态库、静态库
- 视频上传过程中自动转换为flv格式并截图生成缩略图(Java调用命令实现)
- 关于Vs 2005 中出现编译通过,但运行时出现“未使用调试信息生成二进制文件”的问题
- 代码调用存储过程超时,SQL Server Management Studio里运行很快
- PHP调用MySQL的存储过程的实现代码
- ASP.NET通过Global.asax和Timer定时器 定时调用WebService 运行后台代码
- 调用存储过程,java中通过bboss persistent实现数据库存储过程的调用(位置变量绑定)
- PHP调用MySQL的存储过程的实现代码