链接 : 警告 LNK4098: 默认库 'MSVCRT' 与其他库的使用冲突;使用 /NODEFAULTLIB:Library
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
当我尝试构建与libeay32.lib链接的源代码时。我已经从OpenSSL源代码本地构建了它。我遇到了上面的警告"LINK:warning LNK4098:defaultlib'MSVCRT'与其他库的使用冲突;使用/NODEFAULTLIB:library"。当我调试exe时,只要有一些系统调用(如read()),exe就会崩溃。经过一番搜索,我发现这是与"运行库"MT和MD有关的东西。由于某些原因,我无法通过构建openssl源代码来解决这个问题。到目前为止,我所做的是将条目"MSVCRT.lib"保留在忽略特定库中。我必须为其他几个库执行此操作。我不想这么做。还有其他最优解决方案吗。
如果我理解得对,你将OpenSSL的发布版本与程序的调试版本混合在一起,导致使用不同的CRT版本,因为你还没有发布实际设置,所以更糟糕的是,OpenSSL在你的代码静态时使用DLL CRT。请张贴您的程序使用的CRT是什么类型的(可以通过单击项目上的Properties
,然后单击Configuration Properties -> C/C++ -> Code Generation -> Runtime Libarary
找到)。使用正确的OpenSSL版本(例如,使用调试信息构建并链接到调试CRT),或者,由于您声明无法重新编译OpenSSL,因此在没有优化的情况下使用Multi-threaded DLL
版本编译代码,这样您就可以得到一个可以调试的程序,并使用与OpenSSL相同的CRT。我想这应该能解决问题。
这里的问题是这两种模式不兼容。如果混合使用多线程库和非多线程库,则会出现类似的错误。使用其他模式重新编译其他库,或者更改项目的模式以匹配库的模式。
当使用不同风格的Microsoft C-Runtime库时,会出现此冲突。以下是概述:http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx
因此,如果你链接到msvcrt.lib(动态,多线程CRT),并且你的一个依赖项链接到libcmtd.lib(静态,多线程),就会出现这个警告。这种情况可能会导致细微的错误,并可能导致各种难以调试的问题。除了将冲突库设置为"忽略"列表,如果无法控制依赖关系,则希望一切都好之外,没有什么可以摆脱警告的了。通常,对所有依赖项和程序本身使用相同的C/C++运行时链接是个好主意。
问题是,您正在将应用程序动态链接到VS中的运行时/MD(默认情况下,这意味着您应该在应用程序中提供Visual Studio Redistributable Package)。
属性->配置属性->C/C++->代码生成->运行库
而opensll-lib默认静态链接到运行时(运行时包含例如STL的实现)。混合运行时链接是不好的,因此是警告。您可以通过使用到运行时的动态链接重新编译opensll库来解决此问题。
请遵守:http://developer.covenanteyes.com/building-openssl-for-visual-studio/然后在中
ms\nt.mak
在运行nmake -f msnt.mak
和nmake -f msnt.mak install
之前将MT
更改为MD
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 错误:使用通用引用的声明冲突
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 我在C++中使用提升哈希函数将 3 个双精度组合成一个面临冲突的哈希
- 尝试通过共享指针使用变量时读取访问冲突
- Python C API:使用 MSVC 尝试示例模块时的访问冲突
- 使用智能指针读取访问冲突
- 使用 EvtSetChannelConfigProperty() 函数时出现访问冲突错误
- 使用 Win32 读取文件时,glShaderSource 访问冲突
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- 使用静态 std::vector 类成员时出现访问冲突
- 使用加速进程间创建消息队列 - 内存访问冲突
- 使用 Murmur2 64 位哈希函数生成会导致冲突的输入
- 使用 C++ 标准库避免共享库中的符号冲突
- 错误:使用 tesseract 引擎时 C++ 中的声明'typedef struct tagBLOB BLOB'冲突
- 三维数组c++中的访问冲突(使用malloc)
- Box2d C++访问冲突使用b2fixture超出方法
- 链接 : 警告 LNK4098: 默认库 'MSVCRT' 与其他库的使用冲突;使用 /NODEFAULTLIB:Library
- 读/写访问冲突c++使用libfreenect2
- 读取位置0x00000014时发生访问冲突.使用流