美文网首页
C语言静态动态编译

C语言静态动态编译

作者: laidian | 来源:发表于2018-10-07 12:33 被阅读17次

C语言静态动态编译

附件demo
https://pan.baidu.com/s/1Z7T1WyscQ2jeEgO70oZdTA
https://pan.baidu.com/s/1NJQt-xwh5QW5z38HBoguZg

看看运行效果

gcc main.c ./inc/add.c ./lib/sub.c -o main.o

gcc

-l xxx or -lxxx 可以是libxxx.so 动态编译的库文件也可以是libxxx.a 静态编译的库文件
-L./xxx or -L ./xxx 库文件所在位置
-Wl,-rpath=/root/c/mydemo/lib 不要用相对路径,用绝对路径
使用相对路径 ldd xxx.so 在编译路径就是显示相对路径,而其他路径直接no found
是为程序添加一个运行时库文件搜索路径的命令,在使用gcc编译链接时添加即可
-fPIC

-Wl 表示编译器将后面的参数传递给链接器ld

inc 静态编译

cd ./inc
gcc -c ./add.c -o add.o
ar -r libadd.a ./add.o
cd ../
gcc mainadd.c ./inc/libadd.a -o mainadd.o 效果同下
gcc mainadd.c -L ./inc -l add -o mainadd.o

ldd mainadd.o
    linux-vdso.so.1 =>  (0x00007fff5c370000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fbf5c37e000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fbf5c74b000)

lib 动态编译

cd ./lib
gcc -shared -fPIC ./sub.c -o libsub.so
cd ../
gcc mainsub.c -L ./lib -l sub -Wl,-rpath=/root/c/mydemo/lib -o mainsub.o

ldd ./lib/libsub.so
    linux-vdso.so.1 =>  (0x00007ffc6fde4000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f1616d3a000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1617309000)

ldd mainsub.o
    linux-vdso.so.1 =>  (0x00007ffdd17dd000)
    libsub.so => /root/c/mydemo/lib/libsub.so (0x00007f27505f0000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f2750223000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f27507f2000)

静态库加动态库编译

gcc main.c -L ./inc/ -l add -L ./lib/ -l sub -Wl,-rpath=/root/c/mydemo/lib -o main.mix.o
gcc main.c -L ./lib/ -l sub -Wl,-rpath=/root/c/mydemo/lib -L ./inc/ -l add -o main.mix.o
ldd main.mix.o
    linux-vdso.so.1 =>  (0x00007ffc06ba7000)
    libsub.so => /root/c/mydemo/lib/libsub.so (0x00007f9f78a2c000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f9f7865f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9f78c2e000)

相关文章

  • C语言编译

    C语言静态动态编译 看看运行效果 gcc -l xxx or -lxxx 可以是libxxx.so 动态编译的库文...

  • Swift面试篇

    1.Swift与Objective-C的区别 SwiftOC语言特性静态语言动态语言静态语言由编译器做类型推断,一...

  • C语言静态动态编译

    C语言静态动态编译 附件demohttps://pan.baidu.com/s/1Z7T1WyscQ2jeEgO7...

  • [C++11阅读][3-2-1]auto类型推导(上)

    静态类型、动态类型 C/C++是静态类型语言,在编译时进行类型检查。后来一些新兴的语言,比如Python、Java...

  • ios -- Objc --Runtime(1) :理解 Ob

    C/C++ 属于静态的语言;而ObjC属于动态语言。什么是静态语言?就是在编译器编译后就调用函数地址,代码结构就固...

  • 编译性语言、解释性语言、脚本语言、动态语言、静态语言、动态类型语

    编译型语言 解释型语言 脚本语言 动态语言 静态语言 静态类型语言 动态类型语言 解释以及区别

  • Python 变量 ,对象,引用

    动态类型 C,C++和Java是静态编译型语言,Python属于动态类型的语言,类型实在运行过程中自动决定的,而不...

  • 动态链接库和静态链接库

    C++静态库与动态库 预编译处理预编译命令2.编译将.c/.c++文件转化为汇编语言3.汇编将汇编语言转化为机器可...

  • go语言简介

    1 基础知识 go语言有以下特点: 编译型语言,编译速度快 静态类型语言,拥有动态类型语言特点 类c语法,简单易学...

  • kotlin的基础描述

    动态语言和静态语言动态语言即运行前不需要编译,在运行的时候边解释边运行。静态编译语言是在运行前需要编译,编译完成后...

网友评论

      本文标题:C语言静态动态编译

      本文链接:https://www.haomeiwen.com/subject/mytgoftx.html