• 【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# 
  • 相关阅读:
    MyEclipse连接Oracle,出现ORA00604和ORA12705异常
    MyEclipse连接Oracle,出现ORA00604和ORA12705异常
    SSH Secure Shell Client 乱码问题
    android开发(20) 使用adb建立pc和android设备之间的连接。usb连接方式。
    android开发(22)使用正则表达式 。从一个字符串中找出数字,多次匹配。
    .net 中,使用c# 语言 ,执行exe程序。
    [转载]大数据存取的选择:行存储还是列存储?
    android开发(21)蜂鸣提示音和震动提示的实现。
    arcgis for android 学习 (8) 空间查询 点击某点,选中该点所在单位区域。
    android开发(24)使用SQLiteOpenHelper的onUpgrade实现数据库版本升级
  • 原文地址:https://www.cnblogs.com/kernel0815/p/3952683.html
Copyright © 2020-2023  润新知