2012-11-19 110 views
0

我們正在將32位C++應用程序遷移到64位應用程序(VS 2010)。這個應用程序是10年前用於Windows的IBM VisualAge C++ 3.6.5開發的。由於IBM已停止支持該編譯器,因此我們在將其遷移到VS 2010時遇到問題。從IBM VisualAge C++ 3.6.5遷移到VS 2010

這主要是由於某些缺少的庫。

樣本錯誤:

錯誤LNK2019:解析外部符號__uopen在函數引用 「INT __cdecl allocate_heap_storage_(無效)」(allocate_heap_storage @@ YAHXZ?) 錯誤LNK2019:解析外部符號__ucreate在函數引用「 INT __cdecl allocate_heap_storage_(無效)」(allocate_heap_storage @@ YAHXZ?) 錯誤LNK2019:在函數引用解析外部符號__udestory 「INT __cdecl deallocate_heap_storage_(無效)」(deallocate_heap_storage @@ YAHXXZ?) 錯誤LNK2019:解析外部符號__uclose中引用函數「int __cdecl deallocate_heap_storage_(void)」(?deallocate_he ap_storage @@ YAHXXZ) 錯誤LNK2019:在函數引用解析外部符號__umalloc 「INT __cdecl alloc_share_mem_(INT,INT)」(alloc_share_mem @ YAPAXHH @ Z)

上述功能在umalloc.h定義,但我們錯過了定義。

我們該如何解決?

+1

有沒有可能是你沒有搭建的源? –

+0

有趣的是,你甚至可能無法合法地爲這些函數重新實現用戶堆庫('libhu.a') - 它似乎已獲得專利:http://www.ptodirect.com/Patents/ 6816956我會認爲有很多涵蓋這種事情的現有技術。如果沒有別的,Win32自WinNT 3.5以來支持多個進程級別的堆(我認爲這是Cutler等人從VMS借來的)。 –

回答

0

對於上面的錯誤,這些函數「_ ucreate」, _udestory,_ uclose, _umalloc」都沒有找到鏈接時,我覺得這些功能是通過視覺時代提供的運行時間庫。如果可以找到這些運行時庫的lib文件,你可以把它們放在鏈接的輸入中,它可以通過編譯階段,但可能無法啓動。

這裏的一個建議是用windows替換上面的函數上述所有功能都與內存分配有關