zoukankan      html  css  js  c++  java
  • linux环境下的链接库编译

     https://blog.csdn.net/shaosunrise/article/details/79968921

    有4个文件,test1.c  包含了 print。h, test2.c 包含了sum。h

     

     经过gcc -c  test1.c   test2.c 后,将2个源文件test1.c ,test2.c 编译成 .o 文件

    然后开始生成a库(注意:链接库前缀必须以lib开头),指令如下:ar rcs libtest.a test1.o test2.o

     得到libtest.a库文件后,然后将.a库链接到主程序中,写主程序main.c和头文件main.h 。

     加载a库,生成可执行文件并执行,指令如下:gcc main.c -L. -ltest -o testEXE

    生成动态库:

     so库的前缀必须为lib,然后将.so库链接到主程序main.c中,这里需要注意一下,因为动态库的特性,编译器会到指定的目录去寻找动态库,目录的地址在/etc/ld.so.conf.d/ 目录里的libc.conf文件里

    方法2 还可以将so库复制到默认的目录下。这里是将so库复制到了默认目录下,生成可执行文件并运行,指令如下:

     sudo cp libtest.so  /usr/lib/

    gcc main.c -L. -ltest -o mainExe

    这样就生成了可执行的mainExe可执行文件  。 可直接运行 ./mainExe   

     c主程序文件main.c 调用这些程序(test1.c test2.c)的函数接口是可以使用a库或so库。

    在主程序中只需要include含有库中提供的函数(print(),sum() )接口声明的头文件即可

    在加载动态链接库的时候,有可能会遇到加载不到的错误,原因在于系统默认加载的动态链接库路径里没有找到你的动态库,有三种解决方法:

    1.在执行gcc main.c -L. -ltest -o main 前,执行 export LD_LIBRARY_PATH=$(pwd)

    2.将你so所在的目录写到/etc/ld.so.conf文件里,然后执行ldconfig。

    3.将你的so放在/etc/ld.so.conf里的路径位置里。

  • 相关阅读:
    拓展欧几里得
    使用BIOS进行键盘输入和磁盘读写
    直接定址表
    指令系统总结
    端口
    内中断
    标志寄存器
    call 和 ret 指令
    编写包含多个功能子程序的中断例程
    字符串的输入
  • 原文地址:https://www.cnblogs.com/xinping-study/p/12323907.html
Copyright © 2011-2022 走看看