zoukankan      html  css  js  c++  java
  • GCC实现多文件编译,静态库,动态库

    一 代码

    //add.h
    int add(int a, int b);


    int add(int a, int b)
    {
        return a+b;
    }



    #include <stdio.h>
    #include "add.h"

    void main()
    {
         printf("3 + 2 = %d ",add(3+2));
    }

    二 多文件编译
    1 生成.o文件
    命令:gcc -c add.c main.c
    生成:add.o,main.o

    2 生成可运行文件
    命令:gcc -o main add.o main.o
    生成:main

    3 执行
    命令:./main
    输出:3 + 2 = 5

    二 静态库
    1 生成.o文件
    命令:gcc -c add.c
    生成:add.o

    2 生成libxxx.a
    命令:ar rcs libadd.a add.o
    生成:libadd.a

    3 生成可运行文件
    命令:gcc -o main main.c -static -L. -ladd
    生成:main

    4 执行
    命令:./main
    输出:3 + 2 = 5

    三 动态库
    1 生成.o文件
    命令:gcc -c add.c
    生成:add.o

    2 生成libxxx.so
    命令:gcc -shared -fPIC -o libadd.so add.o
    生成:libadd.so

    3 动态库路径
    方法一:将文件拷贝到文件夹/usr/lib中
    命令:mv libadd.so /usr/lib

    方法二:设置LD_LIBRARY_PATH为当前文件夹
    命令:export LD_LIBRARY_PATH=$(pwd)

    4 生成可运行文件
    命令:gcc -o main main.c -L. -ladd
    生成:main

    #假设没有第3步。会报错:找不到libadd.so

    5 执行
    命令:./main
    输出:3 + 2 = 5


    四 Makefile文件
    #mf:mult file
    #liba: liaxxx.a
    #libso:libxxx.so

    run:main
            ./main
    mfo:add.c main.c
            gcc -c add.c main.c
    mfe:mfo
            gcc -o main add.o main.o
    libo:add.c
            gcc -c add.c
    liba:libo
            ar rcs libadd.a add.o
    libae:liba
            gcc -o main main.c -static -L. -ladd
    libso:libo
            gcc -shared -fPIC -o libadd.so add.o
    libsoe:libso
            export LD_LIBRARY_PATH=$(pwd)
            gcc -o main main.c -L. -ladd



  • 相关阅读:
    C/C++分别读取文件的一行
    (转载)C库函数strtok()
    (转载)C++常量折叠和C语言中const常量对比
    ssh
    ubuntu ufw
    uplevel
    ubuntu lucid source.list
    tail
    socket client with proc
    pack forget
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7352328.html
Copyright © 2011-2022 走看看