您的位置:首页 > 其它

命令行编译的基本指令/动态链接库的使用

2015-10-05 22:32 295 查看
控制台下的编译:

(实际苹果用的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字样


第二行的 -L. 意思是在当前目录下(./)寻找库

现在更改一下链接的库:

有一对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函数的代码没有改变也没有重新编译。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: