【问题标题】:How to link MinGw-compiled library with MSVC project in VisualStudio?如何在 VisualStudio 中将 MinGw 编译的库与 MSVC 项目链接?
【发布时间】:2020-07-28 16:53:37
【问题描述】:

我正在 VS 2017 中编写一个使用 Windows 32 位版本的 SWI Prolog 的项目。我在另一个使用 MSVC 编译的项目中使用 SWI Prolog C++ 接口,使用 C++ 头文件和 .a 静态库来配合它。

我把所有东西都很好地连接在一起,这样项目就可以在 VS 的本地调试器模式下正常运行。但是,当我尝试使用已编译的 .exe 时,出现链接器错误:

在动态链接库C:\ProgrammingLanguages\swipl-32\bin\libswipl.dll中找不到过程入口点__divmoddi4

在谷歌搜索后,我发现这个函数是新版本 GCC 独有的,考虑到它是使用 MinGW 交叉编译的,SWI Prolog 库使用它是有道理的。

问题是我需要这个可执行文件自己工作,但我不知道如何让项目在不直接切换到 GCC 的情况下解决这个链接器错误。有什么办法可以在仍然使用 MSVC 的同时解决此链接错误?

我阅读了一些关于使用extern "C" 解决问题的其他线程,但由于我正在使用的标头中存在重载函数,因此出现编译器错误。除非我需要为 SWI Prolog 使用 C 头文件?

【问题讨论】:

    标签: c++ visual-studio prolog linker-errors


    【解决方案1】:

    它似乎试图在调试器中使用不同的 DLL 版本并作为独立的 EXE。在调试器中运行项目并检查它加载了哪些 DLL(在 VS 中某处有一个特殊的窗格)。然后确保它在作为独立可执行文件运行时可以找到相同的 DLL(例如,将它们与 EXE 放在同一文件夹中)。

    【讨论】:

      【解决方案2】:

      从未找到真正解决此问题的方法,而只是一种旧方法。我回滚了 SWI Prolog 并获取了一个旧版本,该版本实际上已经为 Windows 构建了静态库并可用。

      【讨论】:

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