2009-11-30 54 views
2

我需要對C++靜態鏈接進行一些基本的說明。我有一個名爲data_client.lib的文件。庫文件a.exe,b.exe和c.exe有三個獨立的使用者。有一個名爲data_server.exe的服務,data_client.lib是其接口。實際上,我向data_server.exe和data_client.lib的相應接口添加了另一個功能。由於只有a.exe需要額外的功能,因此我只生成一個.exe文件。我發佈了data_server.exe,data_client.exe和a.exe作爲補丁。現在,B.EXE和c.exe隨機/不一致崩潰扔靜態庫依賴關係

mfc42u!::了CException`RTTI完整 目標定位器「+ 0x10的

是否有意義?如果我也建立b.exe和c.exe,那麼崩潰不會發生。這是它的工作方式?

回答

2

實際上,我在data_server.exe和data_client.lib的相應接口中添加了另一個函數。

這是從這個有點不清楚,究竟是什麼被添加到您的圖書館。但是,如果它是添加到類中的新方法或新方法(而不僅僅是一些新的獨立函數),那麼很有可能重新編譯所有內容將解決您的問題。您的更改可能導致vtable錯失或不被拋出。

這也可能是因爲你的崩潰與此無關,還有一些其他問題正在發生......但從你的描述中,我的錢在一個虛擬問題上。如果是我,我會在調查其他問題之前重新編譯b.exe和c.exe並再次測試。

+0

是的,新的方法被添加到現有的類。 – bdhar

2

也許你沒有明確的依賴關係,但是你的一些項目頭文件使用,或者隱式地把信息放到你的庫中。

2

我不知道錯誤,但您的應用程序b.exe和c.exe正在使用綁定庫的較舊版本與更新版本的data_server.exe進行通信。如果添加了一個函數,某些v_table索引可能會關閉。你一定要重建所有的庫。