測試場景,Test,lib1,lib2,dll1,dll2,分為下面四種情況:
1、Test->lib1->lib2
lib1編譯自己的代碼,對lib2的部分,只需要lib2的頭文件,對lib2的代碼實現,使用占位符關聯。
生成Test連接的時候,把lib1的代碼實現包含進來,再遞歸,把lib1中關聯lib2的代碼實現也包含進來。
運行Test的時候,不再需要lib1和lib2。
2、Test->lib1->dll2
lib1編譯自己的代碼,對dll2的部分,只需要dll2的頭文件,對dll2的代碼實現,使用占位符關聯。
生成Test連接的時候,把lib1的代碼實現包含進來,但是,dll2中的代碼不包含進來。
運行Test的時候,不需要lib1,但是需要dll2【不需要dll的lib文件】
3、Test->dll1->lib2
dll1編譯自己的代碼,對lib2的部分,需要lib2的頭文件和實現,即lib2,把lib2的代碼實現包含到dll1中
生成Test連接的時候,dll1中的代碼不包含進來,並且不再需要lib2。
【可以這樣測試,生成lib2,生成dll1,生成test.exe,刪除lib2,刪除test.exe,再生成test.exe,可以生成成功。說明生成test.exe,連接的時候根本不需要lib2,。也就是說,靜態庫會被連接到動態庫或者exe中,但是不會被連接到其他的靜態庫中】
運行Test的時候,需要dll1,但是不需要lib2
4、Test->dll1->dll2
dll1編譯自己的代碼,對dll2的部分,需要dll2的頭文件和lib文件,對dll2的代碼實現,使用占位符關聯。
生成Test連接的時候,Test需要dll1的lib,dll1需要dll2的lib,但是代碼實現都不會包含在Test中。
運行Test的時候,需要dll1和dll2【不需要他們的lib】