linux下Makefile中包含有shared library动态链接库文件时候的简单例子

如果不知道什么是makefile,可以首先看我的另一篇博客:

linux下Makefile的简单例子及解释

http://www.cnblogs.com/lihaozy/archive/2012/08/09/2629706.html

其实,包含有shared library动态链接库文件的编译链接过程,和不包含的在dependency关系的处理上完全一样,没什么区别,只是g++编译链接含有shared library文件的时候,命令加上相对应的参数(-shared -fPIC -L. -ltest等)即可。

这里有2个文件,一个是test.cpp(中包含有一个test()函数),要编译成libtest.so

另一个是main.cpp(调用test()),要编译成main.o

然后将main.o和libtest.so链接成一个main(最终的可执行文件)

test.cpp   ->   libtest.so

main.cpp  ->   main.o

main.o + libtest.so ->  main

下面是代码和makefile:

test.cpp & main.cpp:

//test.cpp
#include <iostream>
using namespace std;

void test()
{
    cout<<"test() in test.cpp"<<endl;
}
//main.cpp
#include <iostream>
using namespace std;

void test();

int main()
{
    test();
}

makefile:

main: main.o libtest.so
    g++ -o main main.o -L. -ltest

main.o: main.cpp
    g++ -o main.o main.cpp -c

libtest.so: test.cpp
    g++ -o libtest.so test.cpp -shared -fPIC

clean:
    rm *so* *.o main


可以看到,没有太大的区别,dependecy的写法根本没变,只是加上一些参数而已。

原文地址:https://www.cnblogs.com/lihaozy/p/2629812.html