如果不知道什么是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的寫法根本沒變,只是加上一些參數而已。