VERSION = 1.0.0.0 CONFIG += skip_target_version_ext # 生成的so名称上不会带上版本,否则生成libDirtyA1.so
DirtyA中提供接口foo:
1 2 3 4
int DirtyA::foo(int a, int b) { return a + b; }
DirtyB中提供接口foo:
1 2 3 4 5 6
int DirtyB::foo(int a, int b) { DirtyA obj; int tmp = obj.foo(a, b); return tmp / 2; }
那么生成的初始so文件有:
1 2 3 4 5 6 7 8
rwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyA.so -> libDirtyA.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyA.so.1 -> libDirtyA.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyA.so.1.0 -> libDirtyA.so.1.0.0 -rwxrwxr-x. 1 leon leon 27328 Dec 22 18:16 libDirtyA.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so -> libDirtyB.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so.1 -> libDirtyB.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so.1.0 -> libDirtyB.so.1.0.0 -rwxrwxr-x. 1 leon leon 27752 Dec 22 18:16 libDirtyB.so.1.0.0
除了libDirtyA.so.1.0.0和libDirtyB.so.1.0.0之外,都是软链接。
通过ldd( list dynamic dependencies ) 可以看到DirtyB依赖于DirtyA。
[leon@192 dist]$ ll total 84 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:31 libDirtyA.so -> libDirtyA.so.1.1.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:31 libDirtyA.so.1 -> libDirtyA.so.1.1.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyA.so.1.0 -> libDirtyA.so.1.0.0 -rwxrwxr-x. 1 leon leon 27328 Dec 22 18:16 libDirtyA.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:31 libDirtyA.so.1.1 -> libDirtyA.so.1.1.0 -rwxrwxr-x. 1 leon leon 27328 Dec 22 18:31 libDirtyA.so.1.1.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so -> libDirtyB.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so.1 -> libDirtyB.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so.1.0 -> libDirtyB.so.1.0.0 -rwxrwxr-x. 1 leon leon 27752 Dec 22 18:16 libDirtyB.so.1.0.0
libDirtyA.so指向了libDirtyA.so.1.1.0。
构建DirtyC时不会重新编译,运行结果是10.
最后,我们继续修改DirtyA中foo的实现,但提升版本为2.0.0.0,如下:
1 2 3 4
int DirtyA::foo(int a, int b) { return a * b * 2; }
生成的目录变成了这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[leon@192 dist]$ ll total 112 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:36 libDirtyA.so -> libDirtyA.so.2.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:36 libDirtyA.so.1 -> libDirtyA.so.1.1.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyA.so.1.0 -> libDirtyA.so.1.0.0 -rwxrwxr-x. 1 leon leon 27328 Dec 22 18:16 libDirtyA.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:36 libDirtyA.so.1.1 -> libDirtyA.so.1.1.0 -rwxrwxr-x. 1 leon leon 27328 Dec 22 18:36 libDirtyA.so.1.1.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:36 libDirtyA.so.2 -> libDirtyA.so.2.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:36 libDirtyA.so.2.0 -> libDirtyA.so.2.0.0 -rwxrwxr-x. 1 leon leon 27328 Dec 22 18:36 libDirtyA.so.2.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so -> libDirtyB.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so.1 -> libDirtyB.so.1.0.0 lrwxrwxrwx. 1 leon leon 18 Dec 22 18:16 libDirtyB.so.1.0 -> libDirtyB.so.1.0.0 -rwxrwxr-x. 1 leon leon 27752 Dec 22 18:16 libDirtyB.so.1.0.0
[leon@192 dist]$ ll total 312 -rwxrwxr-x. 1 leon leon 261320 Dec 22 18:51 DirtyC -rwxrwxr-x. 1 leon leon 27328 Dec 22 18:50 libDirtyA.so -rwxrwxr-x. 1 leon leon 27752 Dec 22 18:50 libDirtyB.so