我在我的工作空間中有一個visual c++
項目,完全取決於.lib
(靜態庫)。現在我想創建一個使用在Visual C現有的代碼dll
項目+ +,但它顯示我以下linking
錯誤:在Visual c + +項目中獲取鏈接錯誤
Linking...
msvcrt.lib(MSVCRT.dll) : error LNK2005: "public: virtual __thiscall exception::~exception(void)" ([email protected]@[email protected]) already defined in LIBCMTD.lib(stdexcpt.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: "public: __thiscall exception::exception(char const * const &)" ([email protected]@[email protected]@Z) already defined in LIBCMTD.lib(stdexcpt.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: _free already defined in LIBCMTD.lib(dbgheap.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: _malloc already defined in LIBCMTD.lib(dbgheap.obj)
LINK : warning LNK4098: defaultlib "msvcrt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
Debug/finaliTest.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
我在這visual C++
新手。我應該如何預測?
爲
DllMain
代碼:#include "stdafx.h" #include "IDT_DUKPT.h" unsigned char stringKSN[10]; unsigned char m_nderivation_key[16]; unsigned char m_ninitial_key[16]; BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } void OnDecryption(){ GetKey(stringKSN, m_nderivation_key, m_ninitial_key); // Initialization of the method are written in `.lib` file. }
凡爲IDT_DUKPT.H
是:
//IDT_DUKPT.h
#define _IDT_DUKPT_H_
// TDES Encryption
void TDES_Encryption(BYTE *Data, BYTE *Key, BYTE *InitalVector, int Length);
// TDES Decryption
void TDES(BYTE *Data, BYTE *Key, BYTE *InitalVector, int Length);
// Get the Initial Key
void GetKey(BYTE *KSN, BYTE *BDK, BYTE *InitialKey);
我也把IDT_DUKPT.lib
在我的項目文件夾和.lib
鏈接添加到項目設置。
我的主要目標是創建一個dll
,這樣我就可以使用我的java
代碼中的方法使用JNA
。
`
是的你是對的.lib文件是一個靜態庫。你能告訴我如何改變編譯器嗎? –
@AmitPal我已經更新了我的答案和關於此的筆記。我不是Visual Studio IDE的大用戶,因此可能有其他更簡單的路線來實現相同的結果 – simonc
@simoc:其實我是在Microsoft Visual C++,而你在談論Visual Studio 2010 –