gpt4 book ai didi

C++ 库编译但不像以前的版本那样工作

转载 作者:行者123 更新时间:2023-11-28 05:35:03 25 4
gpt4 key购买 nike

有这个库被其他程序用作引用:https://github.com/RetroAchievements/RASuite/tree/master/RA_Integration

我已经下载了编译程序(编译库附带的程序),它们运行良好。我的目标是更改库代码,重新编译它并用我自己编译的 DLL 替换我下载的编译程序的 DLL。像这样:

ProgramA.exe
|_ RA_Integration.dll < replace with my own (built)

甚至在更改代码之前,我只是尝试编译 DLL 并在我下载的已编译程序中使用它。我不愿意自己重新编译程序,因为依赖性等会导致工作量太大。而且我还希望能够将 DLL“发送”给任何需要我修复的人。

所以我已经下载了那个库的源代码,自己重新编译成功但是当我使用它而不是程序附带的那个时,它们没有启动(Windows 事件查看器说有问题加载我的 DLL)。

我假设我的系统与构建原始 DLL 的系统存在差异,这就是它失败的原因。我的问题是:我能找到这些差异吗?虽然我是一名专业的 .NET 程序员(因为这是我的工作),但我是一名 C++ 新手,我很难理解所有那些似乎从一台机器到另一台机器给出不同构建/结果的链接器/预编译器/依赖项/C++ 东西.

我所能找到的是,在项目属性中,“平台工具集”是“Visual Studio 2013 - Windows XP (v120_xp)”,因此我安装了 Visual Studio 2013(带有 Update 5,因为它看起来像 Windows XP基础 VS2013 中不支持)但这似乎还不够。我正在运行 Windows 10,这肯定不是最初的程序员在几年前编译 DLL 时使用的操作系统,但不确定这是否重要?

是否可以从 DLL 本身或项目中找到任何可以提示我系统需要什么的东西?

希望这是有道理的。

谢谢

最佳答案

Before even changing the code, I am just trying to compile the DLL and use it along the compiled programs I have downloaded. I am not willing to re-compile the programs themselves because it will be too much work because of dependencies etc. And I also would like to be able to just "ship" the DLL to whoever wants my fix.

这是你的谬论:你的 DLL 是一个链接依赖项。您必须重新构建您的应用程序,因为很明显,库的 ABI 发生了变化,导致它与您的程序试图在其期望中调用的功能不兼容DLL。

除了使用您宝贵的编程知识构建与 ABI 兼容的包装器 DLL 之外,别无他法 :) 很难找到这些差异 – 因为,例如,您可以从 DLL 中导出一个符号列表,它基本上包含所有DLL“提供”的功能,但这些功能需要如何调用的某些方面实际上并不是其中的一部分,只能由链接器(或手头有太多时间和不健康的痴迷于在他们的头脑中解析事物)来自 C++ 源代码。

换句话说:您更改了运行时链接程序所针对的对象。您现在必须重建您的程序。选项结束!

关于C++ 库编译但不像以前的版本那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38522322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com