【问题标题】:sfml static linkage errors in visualStudio 2017Visual Studio 2017 中的 sfml 静态链接错误
【发布时间】:2019-06-27 09:55:10
【问题描述】:

一段时间以来,我在游戏编程方面遇到了一些问题。我不会说我是编程新手,但链接库对我来说是新事物。所以这是我的问题:当我开始编写 sfml 游戏时(我开始使用 .h 和 .cpp 文件,使用 sfml 2.5.1 64 位),我注意到我不能使用这些和类似于这些功能:

.setColor(Color::Black) / .setFillColor(Color::color)

我收到一条错误消息:

public: __thiscall sf::Color::Color(unsigned char,unsigned char,unsigned char,unsigned char)" (??0Color@sf@@QAE@EEEE@Z) 已在 sfml-graphics-d 中定义。 lib(sfml-graphics-d-2.dll)

然后我发现我必须链接静态库才能使其工作,我这样做了,但我收到一个新错误:

模块机器类型“x64”与目标机器类型“X86”冲突

我可能通过将“目标机器”更改为“未设置”来修复它,然后出现下一个 237 错误:

检测到“RuntimeLibrary”不匹配:值“MDd_DynamicDebug”与值“MTd_StaticDebug”不匹配

public: __cdecl std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QEAA@H@Z) 已在 libcpmtd.lib(xlock.obj) 中定义

private:静态类 std::locale::_Locimp * __cdecl std::locale::_Init(bool)" (?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z) 已在 libcpmtd.lib 中定义(locale0.obj)

未解析的外部符号 __imp_cosf

未解析的外部符号 __imp_sinf

还有更多……基本上,几乎每一行都是错误的。

我找到了将运行时库更改为 /MTd 的可能解决方案,但它似乎不起作用,因为我得到了相同的 237 错误。

可能是什么问题,我该如何解决?

提前谢谢你。

【问题讨论】:

  • 模块机器类型 'x64' 与目标机器类型 'X86' 冲突 表示您正在混合 32 位和 64 位。您的应用程序必须与您链接到的所有二进制文件相同。
  • 是的,我解决了这个问题(因为我现在不明白),但是我得到了其他“检测到不匹配”错误,而不是这个只有一个“模块机器类型”错误...
  • 我这样做了:imgur.com/a/7PAV6E2
  • 我现在确实看到了。我从来没有碰过那个设置。您构建 x86 或 x64 的目标是什么? x86 是 32 位 x64 是 64 位。
  • 我使用 x64 构建,虽然我的游戏是从 x86 开始的,但当我将 mu sfml 2.4.2 更新到 sfml 2.5.1 时,我改变了它。我改变了,因为我的电脑是 64 位的,但构建不必匹配 64 位系统,是吗?顺便说一句,游戏从游戏开始时就错误地输入了“颜色”行,当时它是在 x86 中构建的。顺便说一句,刚才我注意到在这 200 个错误中,我不仅得到“不匹配检测到的错误,而且还有“未解析的外部符号 _imp_cosf”等。我会更新问题:)

标签: c++ windows visual-studio static-libraries sfml


【解决方案1】:

正如其他人提到的,您应该以 x86 为目标,因为您的二进制文件是这样做的。

至于多重定义,请确保您没有编译 .lib 文件,而只编译 SFML 头文件。

不要在任何地方包含 DLL,并确保为链接器设置正确的输入。

SFML 的网站有一个非常详尽的getting started guide,如果您正确地遵循它,您的链接将起作用。

我建议您重新开始,并按照教程一步一步地进行操作。另外,请务必阅读所有内容(跳过教程的一小部分是万恶之源。)

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多