【问题标题】:WxWidgets App build Error Visual Studio 2019WxWidgets 应用程序构建错误 Visual Studio 2019
【发布时间】:2021-05-26 10:51:31
【问题描述】:

我用 Visual Studio 2019 构建了一个 wxwidgets c ++ 程序,在我的电脑上没有问题,但是当我尝试在另一台电脑上启动它时,我收到了缺少库的消息。我搜索了互联网,并被建议将代码生成设置从 DLLMultiThread (/MD) 更改为 MultiThread (/MT),我重新构建了项目并收到了几条错误消息,例如:

1> wxbase31u.lib (string.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (thread.obj): error LNK2038: mismatch found for 'RuntimeLibrary': value 'MD_DynamicRelease' 与 Window.obj 中的 'MT_StaticRelease' 不匹配

1> wxbase31u.lib (list.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (appbase.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (time.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (hashmap.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的值“MT_StaticRelease”不匹配

1> wxbase31u.lib (object.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (strconv.obj):错误 LNK2038:为“RuntimeLibrary”找到不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (log.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (event.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (stringimpl.obj): error LNK2038: mismatch found for 'RuntimeLibrary': value 'MD_DynamicRelease' 与 Window.obj 中的 'MT_StaticRelease' 不匹配

1> wxbase31u.lib (strvararg.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的值“MT_StaticRelease”不匹配

1> wxbase31u.lib (unichar.obj):错误 LNK2038:为“RuntimeLibrary”找到不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (stringops.obj):错误 LNK2038:为“RuntimeLibrary”找到不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (intl.obj):错误 LNK2038:为“RuntimeLibrary”找到不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (wxcrt.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的值“MT_StaticRelease”不匹配

1> wxbase31u.lib (xlocale.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (dummy.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (module.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的值“MT_StaticRelease”不匹配

1> wxbase31u.lib (msgout.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的值“MT_StaticRelease”不匹配

1> wxbase31u.lib (translation.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (utils.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (main.obj): error LNK2038: mismatch found for 'RuntimeLibrary': value 'MD_DynamicRelease' 与 Window.obj 中的 'MT_StaticRelease' 不匹配

1> wxbase31u.lib (threadinfo.obj): error LNK2038: mismatch found for 'RuntimeLibrary': value 'MD_DynamicRelease' 与 Window.obj 中的 'MT_StaticRelease' 不匹配

1> wxbase31u.lib (arrstr.obj):错误 LNK2038:为“RuntimeLibrary”找到不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (config.obj):错误 LNK2038:为“RuntimeLibrary”找到不匹配:值“MD_DynamicRelease”与 Window.obj 中的“MT_StaticRelease”不匹配

1> wxbase31u.lib (stdpbase.obj):错误 LNK2038:发现“RuntimeLibrary”不匹配:值“MD_DynamicRelease”

(也许这些不是警告,因为我必须用我的语言翻译它们):

我做错了什么?看不懂。

【问题讨论】:

  • 我做错了什么?使用了错误的运行时值。给你的将 MD 更改为 MT 的建议是个坏建议,因为你也必须重新编译 wxWidgets 以匹配它。
  • 那我该如何解决这个问题或缺少库问题(MSVC140.dll 和 VCRUNTIME140.dll 等库)?
  • 最简单的方法是安装Visual Studio Redistributable。对于我的应用程序,我创建了一个基于 NSIS 的安装程序,它会与我的应用程序和数据一起自动执行此操作。可再发行版可在此处下载:https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0

标签: c++ visual-studio wxwidgets


【解决方案1】:

您需要在动态或静态链接标准 C++ (CRT) 库之间进行选择。如果您动态链接它们,这是默认的,而且几乎总是更好的选择,您需要将可执行文件所依赖的 DLL 与您的应用程序一起分发,并确保它们可以在您安装它的同一目录中找到。如果您使用/MT 静态链接,您必须也使用相同的选项构建您的应用程序及其所有依赖项,包括wxWidgets。对于 wxWidgets,这可以在从命令行使用 makefile 构建时通过在 nmake 命令行上传递 RUNTIME_LIBS=static 来完成。如果您使用项目文件,则必须手动检查所有这些文件的 RuntimeLibrary 选项(这可以通过在 IDE 中多选它们并针对所有配置和平台修改此选项来完成)。

【讨论】:

  • 非常感谢,我会尝试您建议的所有方法
猜你喜欢
  • 2020-05-16
  • 2021-08-15
  • 2021-04-16
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多