码迷,mamicode.com
首页 > 其他好文 > 详细

命令行编译的基本指令

时间:2015-10-05 23:12:25      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

控制台下的编译:

(实际苹果用的clang,将gcc换成clang也是一样的效果)

gcc [options] <inputs>

option常用的有

-o 链接

-c 将.c源文件编译成.o目标文件,不进行链接

gcc helloworld.c -c

将生成helloworld.o

需进一步输入

gcc helloworld.o -o helloworld

来生成最终的可执行文件helloworld。

gcc helloworld.c -c -o <随便一个名字>

能自定义生成的目标文件名称 

 

-l(小写L)后接xxxx 表示调用libxxxx.yy 库

如果库不在系统默认的目录下要使用-L后接路径 再接-lxxxxx

-I(大写i)后接路径,表示在此路径下寻找头文件 xxxx.h

创建静态链接库:

ar -rcs libxxxx.a aaaa.o bbbb.o ccccc.o ...etc

r:如果目标文件存在就刷新它

c:创建后不显示反馈信息

s:在文件开头建立索引

 创建动态链接库:

不同操作系统的动态链接库后缀不相同

Windows里动态链接库后缀为 .dll(Dynamic Link Library)

Linux里后缀为 .so

Mac里后缀为 .dylib

创建:(生成的动态链接库后缀跟随系统)

gcc -shared <FileName>.o livxxxx.dylib

使用:

和静态库一样

 

使用 nm 指令查看库

==================================

实例测试

~/Desktop/codeC 下有3个文件 main.c test.c/.h

test文件内有一函数print_hello,作用是打印"Hello World!"

main.c中include了test.h并调用了print_hello

先将test.c/.h制成动态链接库:

gcc test.c -c //此操作在当前目录下生成test.o
gcc -shared test.o -o libhello.dylib //此操作在当前目录下生成lib hello.dylib

链接并生成可执行文件

gcc main.c -c //生成main.o
gcc main.o -L. -lhello -o helloworld //生成helloworld
./helloworld //控制台输出helloworld字样

 

现在更改一下链接的库:

有一对test2.c/.h文件,里面也有一个print_hello函数,但作用是打印"How Are You"

用该文件生成同样名称的动态链接库:

gcc test2.c -c //生成test2.o
gcc -shared test2.o -o libhello.dylib //重新生成了同名动态链接库

 

然后直接运行原来的那个helloworld程序:

./helloworld

控制台输出了"How Are You",而不是“Hello World"了,即使main函数的代码没有改变也没有重新编译。

命令行编译的基本指令

标签:

原文地址:http://www.cnblogs.com/makejeffer/p/4856406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!