2017-07-24 144 views
0

當我鏈接到我的C++ DLL程序時,我收到以下錯誤和警告:lnk4022:未修飾符號 - 如何修復?

Severity Code Description Project File Line Suppression State 
Warning LNK4022 cannot find unique match for symbol 'Init' MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "void __stdcall Init(void)" ([email protected]@YGXXZ) defined in Release\MTF_Garch.obj MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "public: long __thiscall ATL::CComCriticalSection::Init(void)" ([email protected]@[email protected]@QAEJXZ) defined in Release\stdafx.obj MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "protected: int __thiscall CAppDestinations::Init(void)" ([email protected]@@IAEHXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "public: void __thiscall CMFCDragFrameImpl::Init(class CWnd *)" ([email protected]@@[email protected]@@Z) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "protected: void __thiscall CMFCFontComboBox::Init(void)" ([email protected]@@IAEXXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "protected: virtual void __thiscall CMFCPropertyGridCtrl::Init(void)" ([email protected]@@MAEXXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "protected: void __thiscall CMFCPropertyGridProperty::Init(void)" ([email protected]@@IAEXXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "protected: void __thiscall CMFCToolBarSpinEditBoxButton::Init(void)" ([email protected]@@IAEXXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "public: void __thiscall CPaneDivider::Init(int,class CWnd *)" ([email protected]@@[email protected]@@Z) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "public: void __thiscall CRecentDockSiteInfo::Init(void)" ([email protected]@@QAEXXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "public: void __thiscall CRecentPaneContainerInfo::Init(void)" ([email protected]@@QAEXXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "protected: void __thiscall CVSListBoxBase::Init(void)" ([email protected]@@IAEXXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfc140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "public: long __thiscall ATL::CComCriticalSection::Init(void)" ([email protected]@[email protected]@QAEJXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\mfcs140u.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "public: long __thiscall ATL::CComCriticalSection::Init(void)" ([email protected]@[email protected]@QAEJXZ) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\atls.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Warning LNK4002 "public: int __thiscall ATL::_stdcallthunk::Init(unsigned long,void *)" ([email protected][email protected]@@[email protected]) defined in D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\atlmfc\lib\x86\atls.lib MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Error LNK2001 unresolved external symbol Init MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\MTF_Garch\MTF_Garch.def 1 
Error LNK1120 1 unresolved externals MTF_Garch d:\Users\ypx7647\Documents\Visual Studio 2017\Projects\MTF_Garch\Release\MTF_Garch.lib 1 

顯然,在我的VS 2017年社區解決方案有很多init的存在,但我不知道他們來自。

的DEF文件是這樣的:

LIBRARY MTF_Garch 
EXPORTS 
    Init @1 
    OnParamsChange @2 
    Calculate @3 
    ReplaceStr @4 
    IntrfProcsRec @5 

而我是包括:

#include <windows.h> 
#include "IndicatorInterfaceUnit.h" 
#include "TechnicalFunctions.h" 
#include <string> 
#include <vector> 
#include "Garch.h" 

在Garch.h

#include <ql/auto_link.hpp> 
#include <ql/quantlib.hpp> 
#include <boost/geometry/index/detail/utilities.hpp> 
#include <ql/models/volatility/garch.hpp> 
#include <ql/math/optimization/simplex.hpp> 
#include <ql/math/optimization/levenbergmarquardt.hpp> 

我不使用ATL文件知道,儘管它是我創建的MFC DLL解決方案。剩下的我不確定它們是什麼。

因爲我對C++相當陌生,有人可以告訴我怎麼去告訴鏈接器它應該使用哪個Init(我知道有一個.def文件的EXPORT語法,但一直沒能找到文檔)或者我如何擺脫所有其他我不需要的東西。

謝謝。

回答

1

您需要指定要在.def文件中導出的符號的損壞名稱。我發現這些常用方法是基於鏈接器錯誤消息中未定義符號的名稱。我將更新.def並重建。

查看您列出的候選人,您可能想要導出MTF_Garch文件中定義的符號。將您的導出文件中的「Init @ 1」行替換爲

[email protected]@YGXXZ @1 

改爲。您也可以爲其他導出使用損壞的名稱,但由於鏈接器只發現一個可能的符號,因此目前不需要它們(但可能在將來)。

+0

謝謝,那些過去的錯誤。 – Andrew