5

看起来已经做了一些工作来使pthread-win32与 x64 一起工作,但没有构建说明。我尝试使用 Visual Studio x64 交叉工具命令提示符进行简单构建,但是当我尝试从 x64 应用程序链接到 lib 时,它看不到任何函数导出。似乎它仍在将 lib 编译为 x86 或其他东西。

我什至尝试在适当的地方将 /MACHINE 添加到 makefile 中,但这没有帮助。有没有人让这个工作?

4

7 回答 7

4

对我来说,我只使用 64 位 windows 编译器(在这种特殊情况下为 mingw-w64 交叉编译器)然后 make (with2.9.1) 像:

$ make clean GC-static 

然后我如何安装它以供使用(当然,其中一些可能不需要),

cp libpthreadGC2.a $mingw_w64_x86_64_prefix/lib/libpthread.a
cp pthread.h sched.h semaphore.h $mingw_w64_x86_64_prefix/include

然后要使用它,您必须定义它(例如 ffmpeg 配置行以使用它):

--extra-cflags=-DPTW32_STATIC_LIB 

无论如何,这是一种方式。

另一种方法是执行相同操作,然后修改 *.h 文件并从标头中删除对 dllexport 的所有引用(或在标头中手动定义 DPTW32_STATIC_LIB)。

前任:

 sed 's/ __declspec (dllexport)//g;s/ __declspec (dllimport)//g'

(参考:zeranoe 构建脚本)

于 2013-05-06T13:06:43.153 回答
4

您可以在此处使用vcpkg 。这是 C++ 的 Windows 包管理器。它支持 pthread 构建以及其他开源库。

我想使用静态 pthread 库。当我下载 pthread 时,我得到了 dll(pthread.dll) 并导入了 lib(pthread.lib),即我不能只使用 pthread.lib,我必须使用 pthread.dll 文件。

所以使用 vcpkg 我已经构建了静态库。我可以在没有任何 dll 依赖项的情况下使用它

使用“vcpkg”,您可以构建静态库和动态库

您可以使用以下步骤

下面我添加了所有 DLL (x86|x64) 和 LIB (x86|x64) 案例的步骤。您可以根据需要构建它。

从 git 目录vcpkg git repo克隆 vcpkg

从您克隆 vcpkg 的目录运行以下命令 - 这将安装 vcpkg

bootstrap - vcpkg.bat

通过运行以下命令检查库的可用性

vcpkg search pthread

这将在下面显示结果

mbedtls[pthreads]                     Multi-threading support
pthread              3.0.0            empty package, linking to other port
pthreads             3.0.0-6          pthreads for windows

如您所见,它支持 Windows 的 pthread

1 .Building Dynamic Library with import lib (DLL)

构建 x86 DLL

vcpkg install pthreads:x86-windows

它将在.\vcpkg\installed\x86-windows中构建 dll 和导入库,从这里复制lib包含,您可以使用它们

构建 x64 DLL

vcpkg install pthreads:x64-windows

它将在.\vcpkg\installed\x64-windows中构建 dll 和导入库,从这里复制lib包含文件夹。

2.构建静态库(LIB)

构建 x86 LIB

vcpkg install pthreads:x86-windows-static 

它将在.\vcpkg\installed\x86-windows-static中构建 dll 并导入库, 从此处复制lib包含,您可以使用它们

构建 x64 LIB

vcpkg install pthreads:x64-windows-static

它将在.\vcpkg\installed\x64-windows-static中构建 dll 并导入库, 从此处复制lib包含文件夹。

注意: 尝试使用管理员权限

于 2020-08-05T13:21:23.410 回答
2

在正式发布之前,您似乎必须查看 CVS 头才能获得该库的 2.9 版。2.9 版包含所有 x64 补丁,但如果您尝试从命令行编译静态库,仍然会遇到问题。

我知道的唯一解决方法是使用 DLL 而不是静态链接 LIB。

于 2008-10-02T13:29:29.437 回答
2

这是我的做法(VS2015)。也应该适用于较旧的 Visual Studio。

1) 从 SourceForge 下载发行版 .zip
2) 解压到一个干净的文件夹 - 应该看到“pthreads.2”
3) 打开 Visual Studio 命令提示符,导航到“pthreads.2”。4)运行“nmake”,没有参数。它会生成一条帮助消息,列出您可以使用“nmake”来构建它的所有合法命令。有关更多信息,请参阅“pthreads.2\FAQ”文件,该文件解释了它们的 3 种不同风格的“清理”处理。

我建议只构建“VC”和“VC-debug”(也许是静态的)。“真正的”pthreads 是 POSIX 平台(如 Linux)上的 C 系统库,因此只有这些组合才能在 Windows 上为您提供与在 Linux、FreeBSD 等平台上完全相同的 C 错误行为。

于 2015-07-29T20:41:18.000 回答
0

此消息可能会有所帮助。

于 2008-10-01T22:32:03.370 回答
0

要扩展 kgriffs 答案,必须再做两件事才能实际构建 64 位 DLL 而不是 32 位 DLL。

首先通过 CVS 下载最新的 pthreads(建议在这里

1) 使用 64 位构建工具 - 通过在命令行中加载正确的 VC 环境设置来实现(更多信息在这里):

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat amd64

(将 11.0 更改为您使用的任何版本)

2)因为它写在pthreads Makefile中:

TARGET_CPU 是由 SDK 提供的 Visual Studio 命令提示符设置的环境变量(VS 2010 Express plus SDK 7.1) PLATFORM 是可以在 VS 2013 Express x64 交叉开发环境中设置的环境变量

这意味着,如果不是由 vcvars 完成(在我的情况下不是),您需要设置 TARGET_CPU 或 PLATFORM(以防我同时设置它们):

set TARGET_CPU=x64 set PLATFORM=x64

3)现在是最后一步:

nmake clean VC nmake clean VC-debug

这将生成一个 64 位的 DLL 文件(以及正确的导入库和 PDB)。我可以验证它是否适用于 Visual Studio 2012。

于 2018-01-04T12:22:40.867 回答
0

我成功地将“pthread-win32”替换为“pthreads4w” https://sourceforge.net/projects/pthreads4w/nmake ,并使用控制台命令在 MSVC2019 中为 x64 目标编译。甚至静态链接。

于 2020-06-22T00:29:44.070 回答