在Visual C 项目中获取链接错误
Getting linking error in visual c++ project
我的工作空间中有一个visual c++
项目,该项目完全取决于.lib
(静态库)。现在,我想使用Visual C 中的现有代码创建一个dll
项目,但它显示了linking
错误:
Linking...
msvcrt.lib(MSVCRT.dll) : error LNK2005: "public: virtual __thiscall exception::~exception(void)" (??1exception@@UAE@XZ) already defined in LIBCMTD.lib(stdexcpt.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: "public: __thiscall exception::exception(char const * const &)" (??0exception@@QAE@ABQBD@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
。
`
听起来您是在混合了与C Run-Times不同选项编译的对象。IDT_DUKPT.lib
是静态库(对象文件的集合而不是单独的DLL导入库)吗?如果是这样,我想一个是使用/MTd
编译的,而另一个是使用/MD
选项。
请参阅http://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.80).aspx有关详细信息。
有几种方法可以解决此问题。最简单的是更改编译器标志以供您的应用程序使用/MDd
或/MTd
的哪个尚未使用:
- 右键单击解决方案资源管理器中的相关CSPROJ,然后选择属性
- 在出现的对话框中,展开C/C 然后选择命令行
- 在对话框右侧的选项框中,添加
/MTd
或/MDd
- 有关完整性,请更改配置以释放并将
/MT
或/MD
添加到其编译器选项
您是否尝试过创建新的dll,然后在层次结构中添加每个文件,每次添加后,编译?
请记住,当您添加DLL时,导出会出现图片。您将无法直接添加。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 无法使函数公开。获取:"LNK2005"错误。如何调试链接器错误
- 错误 VSP1011:无法获取调试信息.与 /配置文件链接器开关链接
- 获取链接 创建flyweight_pattern时出错
- 使用自定义工具集获取动态退出析构函数链接错误 - eh 矢量析构函数
- 在可视化解决方案 c++ 中获取链接器错误
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- C++程序调用 C 函数 在 g++ 链接期间获取未定义的引用
- 如何在Visual Studio中的库编译时间中获取链接器错误
- 哪种方法更好获取静态链接DLL的模块句柄(HMODULE) - 使用GetModuleHandleEx()或LoadLibrary()?
- 在对类对象的赋值进行链接时获取垃圾值,使用按值返回类对象的赋值运算符重载
- 获取无效或损坏的文件LNK1107:尝试链接 OpenSceneGraph 教程.dll时无法0x378读取
- 在Visual C 项目中获取链接错误
- 在 VS 中,以编程方式获取链接器>其他库目录属性,或获取宏值
- 视觉获取链接错误:C++中的外部.如何访问在文件 A 中修改的变量的值.CPP在另一个文件 B .CPP中修改
- 如何在右键单击链接并从上下文菜单访问功能后获取链接的 DOM
- 获取链接器错误
- Qt中新的获取链接器和Makefile错误
- 重载模板类的运算符<<时获取链接器错误
- C++从html代码中获取链接