zoukankan      html  css  js  c++  java
  • 命令行编译的基本指令/动态链接库的使用

    控制台下的编译:

    (实际苹果用的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函数的代码没有改变也没有重新编译。

  • 相关阅读:
    [算法] Tarjan算法求割点
    [题解] POJ2689 [质数距离]
    [题解] 「NOIP2009」最优贸易
    pyCharm更换主题、字体大小和编辑器字体颜色
    python之冒泡排序简单算法
    修改pip阿里镜像
    Postman工具简介
    接口文档解析
    HTTP接口请求
    接口(API)测试学习
  • 原文地址:https://www.cnblogs.com/makejeffer/p/4856406.html
Copyright © 2011-2022 走看看