zoukankan      html  css  js  c++  java
  • 【linux】 静态库编译

    文件如下:

    root@ubuntu:/home/test# ll 
    total 72
    drwxr-xr-x 3 root root 4096 Sep  2 10:20 ./
    drwxr-xr-x 4 root root 4096 Sep  2 08:31 ../
    -rwxr-xr-x 1 root root 7901 Sep  2 10:09 a.out*
    -rwxr-xr-x 1 root root 7901 Sep  2 10:16 exe*
    drwxr-xr-x 2 root root 4096 Sep  2 10:14 lib/
    -rwxrwxrwx 1 root root  149 Sep  2 10:00 libcaller.cpp*
    -rw-r--r-- 1 root root   66 Sep  2 09:35 libcaller.h
    -rw-r--r-- 1 root root 1184 Sep  2 10:14 libcaller.o
    -rwxrwxrwx 1 root root  232 Sep  2 10:07 libfuncapi.cpp*
    -rw-r--r-- 1 root root   64 Sep  2 10:05 libfuncapi.h
    -rw-r--r-- 1 root root 1196 Sep  2 10:14 libfuncapi.o
    -rw-r--r-- 1 root root   70 Sep  2 09:56 libsystemapi.h
    -rwxrwxrwx 1 root root  116 Sep  2 08:44 libsystem.cpp*
    -rw-r--r-- 1 root root 1156 Sep  2 10:14 libsystem.o
    -rw-r--r-- 1 root root  590 Sep  2 10:14 makefile
    -rwxrwxrwx 1 root root   82 Sep  2 09:37 test.cpp*
    root@ubuntu:/home/test# 

    文件内容分别如下:

    root@ubuntu:/home/test# cat test.cpp 
    #include <iostream>
    
    extern void caller();
    
    int main()
    {
            caller();
            return 0;
    }
    
    root@ubuntu:/home/test# cat libcaller.h 
    #ifndef LIB_CALLER_H
    #define LIB_CALLER_H
    
    void caller();
    
    #endif
    root@ubuntu:/home/test# cat libcaller.cpp
    #include <stdio.h>
    #include "libfuncapi.h"
    
    void caller()
    {
            printf("this is %s @ %s:%d.", __FUNCTION__,__FILE__,__LINE__);
            func_api();
            return;
    }
    
    root@ubuntu:/home/test# cat libfuncapi.h
    #ifndef FUNC_API_H
    #define FUNC_API_H
    
    void func_api();
    
    #endif
    root@ubuntu:/home/test# cat libfuncapi.cpp
    #include <stdio.h>
    #include "libsystemapi.h"
    #include "libfuncapi.h"
    
    void func_api()
    {
            printf("this is %s @ %s:%d.
    ", __FUNCTION__,__FILE__,__LINE__);
            system_api();
            return;
    }
    
    #if 0
    int main()
    {
            funcapi();
            return 0;
    }
    #endif     
    root@ubuntu:/home/test# cat libsystemapi.h 
    #ifndef SYSTEM_API_H
    #define SYSTEM_API_H
    
    void system_api();
    
    #endif
    root@ubuntu:/home/test# cat libsystem.cpp 
    #include <stdio.h>
    
    void system_api()
    {
            printf("this is %s @ %s:%d.", __FUNCTION__,__FILE__,__LINE__);
            return;
    }
    
    root@ubuntu:/home/test# 

    makefile:

    root@ubuntu:/home/test# 
    root@ubuntu:/home/test# cat makefile 
    
    CUR_DIR=$(PWD)
    
    RM = rm -f
    
    OBJS = $(CUR_DIR)/*.o
    LIB_DIR = $(CUR_DIR)/lib
    
    all: pre_work libsystemapi.a libfuncapi.a libcaller.a test
    
    libsystemapi.a:
            g++ -c libsystem.cpp -o libsystem.o
            ar cr $@ libsystem.o
    
    libfuncapi.a:libsystem.o
            g++ -c libfuncapi.cpp -o libfuncapi.o
            ar cr $@ libfuncapi.o $^
    
    libcaller.a:libfuncapi.o libsystem.o
            g++ -c libcaller.cpp -o libcaller.o 
            ar cr $@ libcaller.o $^
    
    test: post_work $(LIB_DIR)/libcaller.a
            g++ test.cpp $(LIB_DIR)/libcaller.a -o exe
    
    pre_work:
            mkdir -p $(LIB_DIR)
    
    post_work:
            mv ./*.a $(LIB_DIR)/
    
    clean:
            $(RM) $(OBJS) $(LIB_DIR)/*
    root@ubuntu:/home/test# 
  • 相关阅读:
    WebView(网页视图)基本用法
    Android——ProgressBar(进度条)
    第一阶段任务
    第七周学习总结
    (HDU)1095 --A+B for Input-Output Practice (VII)(输入输出练习(VII))
    (HDU)1094 --A+B for Input-Output Practice (VI)(输入输出练习(VI))
    (HDU)1093 --A+B for Input-Output Practice (V)(输入输出练习(V))
    (HDU)1092 --A+B for Input-Output Practice (IV)(输入输出练习(IV))
    (HDU)1091 --A+B for Input-Output Practice (III)(输入输出练习(III))
    (HDU)1090 --A+B for Input-Output Practice (II)(输入输出练习(II))
  • 原文地址:https://www.cnblogs.com/kernel0815/p/3952683.html
Copyright © 2011-2022 走看看