如何编译x64的静态pthread-win32库?

问题描述:

它看起来像做了一些工作,使pthread-win32与x64一起工作,但没有构建指令。我试图用Visual Studio x64 Cross Tools命令提示符来模拟构建,但是当我尝试从x64应用程序链接到lib时,它看不到任何函数导出。它似乎仍然将lib编译为x86或其他东西。如何编译x64的静态pthread-win32库?

我甚至尝试在适当的位置添加/ MACHINE到makefile,但它没有帮助。有没有人得到这个工作?

直到它正式发布,它看起来像你必须检查出CVS头获得版本2.9的图书馆。版本2.9具有所有的x64补丁,但是如果您尝试从命令行编译静态库,仍然会遇到问题。

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

This message可能会有所帮助。

对于我来说,我只是使用64位Windows编译器(在这种特殊情况下的MinGW-W64交叉编译器),然后使(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构建脚本)

这里是我是如何做到的(VS2015)。应该也适用于较旧的Visual Studios。

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

我建议只建立“VC”和“VC-debug”(也可能是静态的)。 '真正'的pthreads是像Linux这样的POSIX平台上的C系统库,所以只有那些组合才会给你在Windows上完全相同的C错误行为,你会在Linux,FreeBSD等上得到。

+0

嘿,我认为这是最好的答案,但它没有解决原始问题的一个方面。也就是说,如何修改nmake Makefile以使二进制文件成为x64位二进制文​​件而不是x86 32位二进制文​​件。如果有人知道,请添加到这个帖子。在Makefile中更改“VC-static-debug”支持的nmake构建配置非常容易,以生成一个发布静态库,例如“VC-static”。 – BoiseBaked 2017-06-13 23:21:09

展开kgriffs回答一个人必须再做两件事来实际构建一个64位DLL而不是32位DLL。通过CVS

首先下载最新的并行线程(如建议here

1)使用64位的构建工具 - 通过在命令行(加载正确的VC环境设置更多一点here)实现:

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

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

2)因为它写在pthreads Makefile中:

TARGET_CPU是一个环境变量通过Visual Studio命令提示符 设置为通过SDK提供(VS 2010速成加SDK 7.1) 平台是可以在VS 2013快64设置交叉 开发环境的环境变量

这意味着,如果它不是由vcvars完成(对我来说这不是),你需要设置TARGET_CPU或平台(以防万一我把他们俩):

set TARGET_CPU=x64 set PLATFORM=x64

3),现在最后一步:

nmake clean VC nmake clean VC-debug

这将使一个64位的DLL文件(和适当的导入库和PDB)。我可以验证它适用于Visual Studio 2012.