LNK4098-它有多危险
LNK4098 - How Dangerous Is It?
我在项目中使用第三方.lib文件。虽然我们的项目构建得很好,而且似乎运行得很好。但我从链接器收到了以下警告:
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
我的项目是一个使用多线程dll运行库(/MD选项)的.dll。我们没有可以链接的.lib文件的其他版本。
- 这个警告有多危险
- 可能的结果是什么
- 我们的项目在我们的办公室运行良好,如果我们预料到意外的崩溃在现实生活中
objdump
?)中转储信息,并具有正确的选项,可以为您提供嵌入每个对象文件中的库信息。反过来,它会将您指向导致问题的对象文件。然后你必须弄清楚为什么它认为它需要那个版本;这通常是编译时使用的编译器选项的结果。因此,例如,如果一个对象文件被构建为多线程,而另一个被构建为单线程,您将得到这样的冲突。你不能忽视它;如果应用程序使用多个线程,并且链接器被拉入单线程库而不是多线程库,那么在未正确同步的函数中会出现神秘的崩溃。
如果构建正确,您就可以了。
危险在于libcmt
定义了一些函数,这些函数也由您正在使用的其他库定义。在这种情况下,您将得到错误(在链接时)说一个符号是多重定义的。但是,如果它构建时没有错误,那么生成的可执行文件应该是好的。
相关文章:
- 既然存在危险,为什么项目要使用-I include开关
- 未初始化的变量有什么危险
- 将字符移出范围的危险
- 在C++的头文件中使用常量并在程序中询问其地址的任何潜在危险
- CRTP - 危险的内存访问?
- 危险指针的内存排序
- 在对象构造期间,将指向尚未构造的子对象的指针传递给另一个子对象的构造函数是否危险?
- 为什么 CWE 认为 rand() 具有潜在危险
- "this"关键字在C++中的实现限制,因为它与危险但功能示例有关
- cppcheck 抱怨危险地使用 c_str(). c_str() 返回的值在此调用后无效
- cpp 检查抱怨危险使用 c_str(). c_str() 返回的值在本次调用后无效,如何解决?
- 使用危险的幻数N
- 派生类的模板类作为函数的参数 - 危险?
- CUDA:来自不同翘曲但相同块的 2 个线程尝试写入相同的共享内存位置:危险?
- 聚合初始化的 C++17 扩展是否使大括号初始化变得危险?
- 从 int 到 longlong 的危险转换:没有警告
- 在模板中存储右值引用的危险
- 这个危险指针示例是否因为 ABA 问题而存在缺陷?
- 是否存在与将数据流式传输到 c++ 异常类相关的任何危险
- LNK4098-它有多危险