问题标签 [winelib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
776 浏览

c++ - 使用 Winemaker/Winelib 找不到 Windows.h

目前我正在尝试将 Windows 程序移植到 Linux,更具体地说是 DLL。该代码是用 C++ 编写的,并使用了许多 Winapi 调用。因为我不想从头开始重建整个东西,所以我认为用 Winelib 重新编译是一个好的开始,值得一试,但我以前从未使用过它。所以我使用 Winemaker 来准备代码并创建一个 Makefile。使用会make打印出windows.h无法找到的错误。好吧,我现在正在使用 Ubuntu,所以当然找不到它,但我认为 usingwineg++会通过覆盖 wineapi 层来处理这些事情。我阅读了 Winelib 用户指南,但似乎我并没有真正理解这个概念。
我在这里想念什么?这肯定不会是我遇到 Winelib 的最后一个问题

0 投票
1 回答
249 浏览

linux - 在 C++ 的 linux 环境中调用 .dll

我有想从 Linux 环境访问的 windows 动态链接库。我没有那个库的源代码,所以我无法构建 .so 文件。

有没有办法通过使用Winelib或任何其他库或工具将库文件转换为 .so 文件,以便我可以调用该库中定义的函数?

0 投票
0 回答
212 浏览

linux - 使用 Winelib 在 Linux 上使用 Windows API 在 C 中编译 Socket 程序

我正在使用 winelib 在 linux 平台上编译 windows 套接字代码。我的想法是了解 winelib 在链接器阶段的行为。我正在使用两个命令“winemaker --lower-uppercase”进行编译。并按顺序“制作”。每次当我制作时,winegcc 都会要求其他标题,如“windows.h”、“winnt.h”等。所以我已经包含了它要求的大部分标题。我的问题是,如果我需要包含标题,那么 winelib 到底在做什么。即使在包含标题之后,对于标题“pshpack8.h”和“pshpack.4”,我也会收到诸如“#include 嵌套太深”之类的错误。

即使要解决这个问题,我也需要使用包括警卫。如果我必须做所有事情,那么 winelib 正在做什么。或者我正在使用的 winelib 有什么问题吗?

请帮忙

0 投票
0 回答
318 浏览

c++ - 通过 winelib 和 winemaker 为 Linux 构建 VC++ 2010 应用程序

我正准备在 Linux 中通过 winelib 构建一个 VC++ 2010 DLL。我想使用 winemaker 从项目现有的 .vcxproj 文件中生成正确的 makefile。但是 winemaker 的(而不是最近的)文档仅指支持 .dsp 和 .vcproj 文件,来自早期的 VC++ 2008 安装。我的问题是:Wine 1.6.2 及更高版本中的 winemaker 是否支持 .vcxproj 项目文件,或者我是否坚持转换回 VC++ 2008 项目以便在 Linux 上为 winelib 构建这个和其他此类 Visual Studio 2010 项目?

0 投票
1 回答
2003 浏览

c++ - 使用 internetcheckconnection 在 C++ 中检查互联网连接

我正在尝试使用internetcheckconnection().

编码:

但是很多错误都出现了

29 11 C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\Wininet.h [错误] 'LPVOID' 没有命名类型

30 11 C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\Wininet.h [错误] 'HINTERNET' 没有命名类型

32 11 C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\Wininet.h [错误] 'WORD' 没有命名类型和 431 更多。

我已经安装了 Wininet.lib,但仍然出现这些错误。如果你能解决这个简单的问题,那就太好了:)。

0 投票
1 回答
686 浏览

dll - 葡萄酒规格文件

我有一个名为morag.dll包含函数 foo 和 bar 的 Windows DLL。我还有一个 Linux SO 调用morag.so,其中包含 foo 和 bar 的 Linux 实现(每个平台上的参数相同)。我有一个 Windows 应用程序,它加载morag.dll我想在 wine 下运行。应用程序本身运行良好,但是我需要创建 foo 和 bar 之间的映射,这是我的应用程序所期望的,morag.dll而不是使用 foo 和 bar in morag.so

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

按照此处的说明,我创建了一个morag.c包含函数的包装器ProxyfooProxybar它除了调用真正的函数 foo 和 bar 之外什么也不做。然后我morag.dll.spec这样创建:-

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

然后我阅读了这个页面,它建议您可能不需要代理功能,所以我尝试完全不使用 c 部分并制作了一个规范文件:-

和上面一样,做了 winebuild 步骤和 winegcc 链接步骤。

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

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

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

我用 wine 运行WINEDEBUG=+module,+relay,看到尝试和失败记录如下:-

似乎它已经找到并加载了我morag.dll.so,因为LoadLibraryExA它已经将句柄返回给它,但是当它试图在该 HMODULE 句柄中找到函数 foo 时它失败了。

如果我发出:-

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

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

非常感谢所有帮助。

0 投票
0 回答
220 浏览

c++ - C++ 调用约定——在 win32 和 Linux/GCC 之间转换?

我正致力于一个项目,通过 Winelib 包装器将在 Wine 中运行的 Windows OpenVR 应用程序直接连接到 Linux 本机 SteamVR,其想法是回避所有问题,试图让一个非常复杂的设备驱动程序在 Wine 本身内部运行. 我几乎立即撞到了墙上。这个问题似乎与调用约定有关,尽管我在从 winedbg 中获取有意义的信息时遇到了麻烦,所以我有可能走得更远。

OpenVR API 是 C++,主要由填充了虚拟方法的类组成。应用程序调用一个 getter (VR_GetGenericInterface) 来从(封闭源)运行时获取实现这些方法的派生类对象。然后它直接在给它的对象上调用这些方法。

我目前的尝试是这样的:我包装的 VR_GetGenericInterface 为请求的接口返回一个自定义包装类。此类的方法在它们自己的文件中定义,分别使用 -mabi=ms 编译。它在没有-mabi=ms 的情况下编译的单独文件中调用非成员方法,最终在实际运行时中进行相应的调用。

这似乎有效,直到应用程序调用一个返回某种描述结构的方法。然后应用程序在调用发生的行上出现段错误,显然在调用返回之后,因为那时我的代码不在堆栈上的任何位置,我用 printfs 验证了我的包装类到达返回到应用程序的点。

这让我想到还有另一个我还没有考虑到的调用约定陷阱,与结构和类似的复杂类型有关。从谷歌搜索看来,返回结构通常是 ABI 中定义更不明确的事情之一,但我没有找到具体的答案或差异描述。

最有可能发生什么,我如何才能更深入地了解应用程序的确切预期?

0 投票
0 回答
53 浏览

macos - 尝试在 Wine 上使用 Mac dll(捆绑包)

我目前正在尝试实现(对于我的实习)使用名为 Bundle 的 Mac OS dll(在 mac 上,一切都被命名为 bundle ...),因为 Wine 的字符串比较功能无法正常工作(例如 gérard = gerard) . 由于重复,它会导致数据库出现问题。

使用 DLL 来使用操作系统的本机比较功能可以解决这个问题。但不幸的是,没有很多文档可以正确实现一个工作包 DLL。

直到现在(和我的导师一起),我们成功地创建了一个“.bundle”(它工作得很好)然后一个“.so”但是在 Wine 下使用它时,我们得到了这个错误“%1 的错误 EXE 格式”告诉我们我们的 dll 格式不正确,因为 Wine 需要一个规范文件来使用本机 DLL。

我们在 WineHQ 网站上找到了制作规范文件的文档,但我们无法通过仅按照此处的说明来克服此阶段(单击“下一步”以在右下角执行以下步骤...)。

有没有人成功(我见过的唯一一个人做到了,在 2005 年做到了......)在 wine 上使用 mac OS DLL 并且可以帮助我们?

非常感谢任何帮助。

0 投票
1 回答
1016 浏览

c++ - 使用 wineg++/winelib 编译 C++ 程序的问题

我在使用wineg++. 为了说明我的问题,我编写了两个测试程序。

消息框.cpp

框架.cpp

第二个程序使用Win32++库,我推荐的不够多。

两个程序都可以使用交叉编译器编译和运行:

但我想使用winelib这样我就可以同时使用 Windows API 和 Unix 库。这是我首先尝试的:

然后我阅读了wineg++的手册页,上面写着:

-mno-cygwin
使用 MSVCRT 的 Wine 实现,而不是链接到主机系统 libc。这对于绝大多数 Win32 应用程序来说都是必需的,因为它们通常依赖于 MSVCRT 的各种功能。MinGW 编译器也使用此开关链接到 Windows 上的 MSVCRT,而不是链接到 Cygwin libc。与 MinGW 共享语法使得编写在 Wine、MinGW+MSYS 或 MinGW+Cygwin 下工作的 Makefile 变得非常容易。

因此,我再次尝试使用-mno-cygwin,并收到一条 2000 行的错误消息,开头为:

所以似乎 C99 的固定大小整数类型不可用。这似乎很容易解决:

框架.cpp

我又试了一次,但收到一条不同的 2000 行错误消息,开头为:

在这一点上,我已经没有想法了。这是我到目前为止所理解的:

  • 我系统的 libc 和 Wine 的 MSVCRT 有冲突的定义。(这可能是意料之中的。)
  • 我系统的 libc++ 硬连线可以与我系统的 libc 一起工作。
  • Wine 带有 MSVCRT,但不带有 C++ 标准库实现。

到目前为止,根据我所掌握的信息,合乎逻辑的做法是寻找与 Wine 的 MSVCRT 兼容的 C++ 标准库实现,但我不知道有哪一种。这里有人知道吗?

0 投票
1 回答
259 浏览

c++ - 尝试将 Winelib 与标准 macOS 构建工具一起使用:出现奇怪的编译器错误

我正在尝试使用 Winelib 在 macOS 上编译 win32 应用程序。如果可能的话,我更喜欢使用 Xcode 提供的标准 macOS 编译器。但是,到目前为止,我无法编译它。如果我尝试使用以下内容编译文件 test.cpp:

在 Ubuntu 16.04 上使用以下命令:

...我收到一些编译器警告,但它仍然编译成功。

但是,如果我尝试使用以下等效命令在 macOS 上编译相同的文件:

...我收到以下编译器错误,我不知道如何修复:

请注意,我使用的是通过自制软件安装的 wine / winelib。

从表面上看,似乎 Winelib 的 msvcrt 实现导致 Xcode 的工具链爆炸。

我能做些什么来解决这个问题吗?