葡萄酒规格文件

2024-04-10

我有一个名为的 Windows DLLmorag.dll包含函数 foo 和 bar。我还有一个名为的 Linux SOmorag.so包含 foo 和 bar 的 Linux 实现(每个平台上的参数相同)。我有一个可以加载的 Windows 应用程序morag.dll我想在酒下跑步。应用程序本身运行良好,但是我需要创建 foo 和 bar 之间的映射,我的应用程序期望在morag.dll改为使用 foo 和 barmorag.so.

为此,我知道我需要创建morag.dll.spec文件并 winebuild 到morag.dll.so.

遵循说明here https://www.winehq.org/docs/winelib-guide/bindlls我创建了一个包装器morag.c包含函数Proxyfoo and Proxybar它只是调用实际函数 foo 和 bar 。然后我创建了morag.dll.spec thus:-

1 stdcall foo (long ptr) Proxyfoo
2 stdcall bar (ptr ptr)  Proxybar

我编译了我的c部分,winebuild了spec文件,然后使用winegcc将它们链接到morag.dll.so

然后我读了这一页 https://wiki.winehq.org/Winelib_User%27s_Guide这表明您可能不需要代理功能,所以我尝试完全不使用 c 部分并制作一个规范文件:-

1 stdcall foo (long ptr)
2 stdcall bar (ptr ptr)

如上所述,执行了 winebuild 步骤和 winegcc link 步骤。

在这两种情况下,这些都是我使用的选项。

winebuild --dll -m32 -E ./morag.dll.spec -o morag.dll.o

ldopts= -m32 -fPIC -shared -L/usr/lib/wine -L/opt/morag/lib -lmorag

winegcc $(ldopts) -z muldefs -o morag.dll.so [morag.o] morag.dll.o

注意: [..] 表示我仅在构建 c 部分的情况下使用它。

在这两种情况下,当我在 wine 下运行的应用程序尝试使用以下命令加载 DLL 中的入口点时GetProcAddress它失败。

我与WINEDEBUG=+module,+relay并看到尝试和失败记录如下:-

0025:Ret  KERNEL32.LoadLibraryExA() retval=7dbc0000 ret=00447b84
0025:Call KERNEL32.GetProcAddress(7dbc0000,00b2d060 "foo") ret=00447c8a
0025:Ret  KERNEL32.GetProcAddress() retval=00000000 ret=00447c8a

看来它已经找到并加载了我的morag.dll.so since LoadLibraryExA已经返回了它的句柄,但是当它尝试在该 HMODULE 句柄中查找函数 foo 时,它失败了。

如果我发出:-

nm -D morag.dll.so

我看到 foo 和 bar 在两种情况下都显示为 U。在也有代理函数的情况下,代理函数被显示为T。

我认为这是因为我还没有构建morag.dll.so文件正确,要么选项错误,要么我的规范文件格式不正确。我不确定应该使用上述两种方案中的哪一种。

非常感谢所有帮助。


我今天遇到了同样的问题。

我的案例中缺少的是正确的导出规则,例如foo and bar在内置DLL中。方便的话,除了--dll对象,即winebuild工具可以为我们创建一个.def文件,例如:

morag.def: morag.spec
    $(WINEBUILD) --def -E $< -o $@

生成的 .def 文件必须与其他对象一起链接到 morag.dll.so 中。这样就可以完成工作了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

葡萄酒规格文件 的相关文章

  • 在哪里可以找到“Microsoft.VisualStudio.TestTools.UnitTesting”缺失的 dll?

    我的 C Visual Studio 项目中出现以下错误 命名空间 Microsoft 中不存在类型或命名空间名称 VisualStudio 是否缺少程序集引用 我还尝试查找 microsoft dll 文件 但找不到任何参考 我是否搜索了
  • 葡萄酒规格文件

    我有一个名为的 Windows DLLmorag dll包含函数 foo 和 bar 我还有一个名为的 Linux SOmorag so包含 foo 和 bar 的 Linux 实现 每个平台上的参数相同 我有一个可以加载的 Windows
  • ASP.NET MVC 中需要两个不同版本的 Newtonsoft.Json.dll

    我开发了一个 MVC 应用程序 它依赖于使用 Newtonsoft Json dll v6 0 0 0 的 Connectwise SDK 和使用 Newtonsoft Json dll v7 0 0 0 的 Dropbox SDK 我需要
  • 是什么破坏了 .net 二进制 (dll) 接口

    考虑两个 net dll 首先 application dll 包含主要业务逻辑和数据访问代码 第二个 webservice dll 主要由 WebMethod 组成 这些 WebMethod 链接到 application dll 的对象
  • 不使用 Obfuscator 的 DLL 加密

    事实上 我被分配了一项任务来保护我的 DLL 这样 如果我将我的软件部署到任何系统 就没有人可以修改或读取我的 DLL 你能帮我如何在不使用混淆器的情况下对其进行加密吗 您将需要软件来执行此操作 以下是您可能需要考虑的一些软件 Eazfus
  • 了解静态链接嵌入式lua环境中lua扩展dll的构建/加载

    我有一个相对复杂的 lua 环境 我试图了解以下内容如何工作 起始设置包括以下两个模块 主要应用 无lua环境 DLL 静态链接到lua lib 包括解释器 该 dll 被加载到主应用程序中 并运行 lua 控制台解释器和可从控制台访问的
  • 如何停止对辅助隐式加载 DLL 的 DLL 劫持

    例如 COMDLG32 DLL 隐式链接到以下系统 DLL 以及其他 xmllite dll dll srvcli dll wkscli dll 链接信息库 netutils dll 微星 dll 由于这些是由操作系统隐式加载的 而不是使用
  • 使用两个具有相同命名空间的 .NET 库

    我目前正在为一家公司维护一些旧代码 正如所发生的那样 我正在修改的当前应用程序使用旧版本的内部库 我们将其称为 Lib1 dll 他们还有一个名为 Lib2 dll 的新版本库 它在许多方面对以前的库进行了改进 不幸的是 Lib2 不向后兼
  • php 7 无法初始化 sqlsrv

    我搜索了一整天 寻找 php 7 VC14 x64 Thread Safe 上 sqlsrv dll 的解决方案 但没有找到解决方案 有没有人解决这个问题 04 Oct 2015 19 48 05 UTC PHP Warning PHP S
  • Visual Studio 设置以在运行时删除对 dll 文件的依赖

    到处都有人建议当 Visual Studio 在运行时找不到 DLL 时如何让 Visual Studio 知道 但我想知道在哪里删除该选项 以便 Visual Studio 在运行时不会尝试查找 dll 文件 我昨天也有类似的问题 但没有
  • 在 DLL 中,函数表的结构如何?

    我一直在研究不明确支持我的操作系统的设备库的实现 特别是 我有一个反汇编的 DLL 以及大量的支持源代码 现在 功能表 导出表是如何构造的 我的理解是 第一个结构 data部分是 RVA 表 接下来是通过索引链接到第一个地址表的字符串表 这
  • 有没有原生 DLL 导出函数查看器? [复制]

    这个问题在这里已经有答案了 是否有免费的本机 Windows DLL 导出函数查看器 它显示函数名称及其参数列表 dumpbin从 Visual Studio 命令提示符处 dumpbin exports csp dll 输出示例 Micr
  • 如何使用 DLL 来模拟静态库的“应用程序内全局变量的多个实例”行为?

    我们有一个用 C C 编写的应用程序 它被分解为单个 EXE 和多个 DLL 这些 DLL 中的每一个都使用相同的静态库 utilities lib 实用程序静态库中的任何全局变量实际上在应用程序内运行时都会有多个实例 每个模块 即 DLL
  • 没有名为“_pywrap_tensorflow_internal”的模块

    在尝试验证tensorflow gpu的安装时 在尝试执行 import tensorflow as tf 时出现ImportError 我在 Windows 7 上使用 Quadro K620 Tensorflow 是使用 pip 安装的
  • C# 无法加载 DLL(找不到模块 HRESULT:0x8007007E)

    错误 无法加载 DLL x dll 找不到指定的模块 HRESULT 异常 0x8007007E 操作系统 Windows 7 我有两个站 Visual Studio 2012 使用 net 4 0 另一个没有安装VS 在使用 VS2012
  • 我不断听说 DLL 地狱——这是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Unity3D 不安全代码需要指定“unsafe”命令行选项

    我在用Unity3D 4 3并打电话给DLL我创造的 当尝试调用它唯一的函数时 这是 void GetModelReferences int nVertices float vertices int nTriangles int trian
  • 捕获由纯 C++ dll 中的 MFC 应用程序生成的 Windows 消息

    首先 这可能吗 我有一个与某些硬件接口的第三方 dll 它是用MFC编写的 我 从 dll 供应商处 收到了一个示例 Visual Studio 2010 解决方案 该解决方案只有一个项目 调用相关第三方 dll 的 MFC 应用程序 ex
  • 如何在我的项目中使用 FFTW DLL 导入库 .lib 作为静态 .lib?

    我了解 C 和编译小型插件 始终基于类似且布局的工作流程 虽然目前我需要将最新版本的 FFTW 编译成静态库 或者从编译版本中获取它 这应该会容易得多 但这给了我一个非常困难的时间 可能是因为我不知道编译的来龙去脉 请注意 我正在使用 Vi
  • 在 C# 中通过 C DLL 使用数组和指针

    我对 C 非常陌生 上周才开始学习 我有一个用 C 编写的自定义 DLL 具有以下函数 DLLIMPORT void test function double test 我想要做的是从 C 获取数组 test 的指针 因此 如果在 DLL

随机推荐