[英]VC9 and VC8 lib compatibility
(最初的問題在那里被問到: http : //www.ogre3d.org/phpBB2/viewtopic.php?t = 44832 )
有人問道:“雖然我想在vs2008(VC9)中構建所有內容,但PhysX SDK是使用vs2005(VC8)構建的。這是否會導致任何問題,使用所有vc9編譯的lib並與此vc8 lib結合使用?”
我回答說,在我嘗試使用VC8生成的.lib文件(和.dll)並將其包含在vc9編譯的exe中的前一天,編譯器無法打開.lib文件。
現在,其他人回答他們這樣做沒有問題....
我找不到vc9和vc8之間的lib兼容性信息。
所以...幫忙?
它可以工作,但在共享CRT / STL對象時會遇到問題。
因此,當您在vc8庫中執行“new”並將其返回到vc9函數(后者又刪除此對象)時,您將從delete中獲取斷言。
T* funcInVc8Lib()
{
return new T();
}
void funcInVC9Program()
{
T* p = funcInVc8Lib();
// ...
delete p; // it should at least assert here (in _CrtIsValidHeapPtr() )
}
lib格式為COFF( http://msdn.microsoft.com/en-us/library/7ykb2k5f ( VS.71 ) .aspx ),COFF也用於PE格式。 因此,我希望大多數(如果不是所有)使用vc8構建的庫都可以與vc9鏈接。
但是我在msdn上發現了一個線程,其中MS似乎不保證用VC8編譯的lib將與VC9很好地鏈接。 http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/8042a534-aa8b-4f99-81ee-e5ff39ae6e69/ )
考慮到這2位信息,我得出結論:盡管MS不保證完全100%的兼容性,但我希望在大多數情況下將vc8 lib和vc9連接起來工作。
希望這可以幫助。 PS你寫“編譯器無法打開.lib文件。”。 鏈接器是嘗試打開要鏈接的庫而不是編譯器的鏈接器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.