我有問題,我完全傻眼了,我正在跳一個人可以指向正確的方向。C++ DLL 靜態庫名稱問題
我有在鏈接的靜態庫DLL在DLL我有以下簽名和開頭的函數:
CellMatrix BasisSwapFlows(double spread, const std::string & convention, int startDate, int endDate, bool forceEOM, const CellMatrix & returnSide, bool explode)
CashFlow::Vector flows(basisSwapFlows(spread, getBasisSwapConvention(convention), XLDate(startDate), XLDate(endDate), forceEOM));
....
在那裏,我打電話從靜態庫中的函數與簽名:
CashFlow::Vector basisSwapFlows(double spread, const BasisSwapConvention & convention, const XLDate & startDate, const XLDate & endDate, bool forceEOM)
當我編譯和調用靜態庫過程中釋放模式運行這個話,第一個參數(傳播)似乎有uninitilized。但是,在呼叫站點(在DLL中)顯然是這樣。這在調試模式下不會發生。另外,如果在調用靜態庫之前,我做的說法即副本:
double spread_loc(spread);
CashFlow::Vector flows(basisSwapFlows(spread_loc, getBasisSwapConvention(convention), XLDate(startDate), XLDate(endDate), forceEOM));
....
和傳遞,不會出現問題。最後,如果我修改靜態lib函數的名稱來說出basisSwapFlows_v2,問題就會消失。但是,重新排序參數什麼也不做。
我正在使用VS2010 C++編譯器。請讓我知道,如果有任何其他信息,我可以提供。
編輯:我還發現,當我在兩個庫中的發佈版本中關閉優化時,此問題消失。事實上,只是禁用DLL中的優化會導致問題消失。編輯2:同樣發現只關閉整個程序優化但將每個Full Optimization項目都解決了問題。
編輯3:保留所有優化,但通過const ref參數也解決了問題。
我和Stas一起工作。我經歷了所有的優化選項,所有需要關閉的才能正常工作的是全程序優化。每個其他優化可以留在原地。 – Hazerider