正文
【linux】 静态库编译
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
文件如下:
root@ubuntu:/home/test# ll
total
drwxr-xr-x root root Sep : ./
drwxr-xr-x root root Sep : ../
-rwxr-xr-x root root Sep : a.out*
-rwxr-xr-x root root Sep : exe*
drwxr-xr-x root root Sep : lib/
-rwxrwxrwx root root Sep : libcaller.cpp*
-rw-r--r-- root root Sep : libcaller.h
-rw-r--r-- root root Sep : libcaller.o
-rwxrwxrwx root root Sep : libfuncapi.cpp*
-rw-r--r-- root root Sep : libfuncapi.h
-rw-r--r-- root root Sep : libfuncapi.o
-rw-r--r-- root root Sep : libsystemapi.h
-rwxrwxrwx root root Sep : libsystem.cpp*
-rw-r--r-- root root Sep : libsystem.o
-rw-r--r-- root root Sep : makefile
-rwxrwxrwx root root Sep : test.cpp*
root@ubuntu:/home/test#
文件内容分别如下:
root@ubuntu:/home/test# cat test.cpp
#include <iostream>extern void caller();int main()
{
caller();
return ;
}root@ubuntu:/home/test# cat libcaller.h
#ifndef LIB_CALLER_H
#define LIB_CALLER_Hvoid 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_Hvoid 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.\n", __FUNCTION__,__FILE__,__LINE__);
system_api();
return;
}#if 0
int main()
{
funcapi();
return ;
}
#endif
root@ubuntu:/home/test# cat libsystemapi.h
#ifndef SYSTEM_API_H
#define SYSTEM_API_Hvoid 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 -fOBJS = $(CUR_DIR)/*.o
LIB_DIR = $(CUR_DIR)/liball: pre_work libsystemapi.a libfuncapi.a libcaller.a testlibsystemapi.a:
g++ -c libsystem.cpp -o libsystem.o
ar cr $@ libsystem.olibfuncapi.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 exepre_work:
mkdir -p $(LIB_DIR)post_work:
mv ./*.a $(LIB_DIR)/clean:
$(RM) $(OBJS) $(LIB_DIR)/*
root@ubuntu:/home/test#