靜態庫與動態庫相互調用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM