1. 程式人生 > >動態庫與靜態庫相互呼叫

動態庫與靜態庫相互呼叫

測試場景,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】