你如何为x64编译静态pthread-win32 lib?

问题描述 投票:2回答:5

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

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

c++ c windows 64bit pthreads
5个回答
3
投票

对我来说,我只使用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构建脚本)


2
投票

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

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


2
投票

这就是我做的(VS2015)。应该适用于较旧的Visual Studios。

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

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


0
投票

This message可能会有所帮助。


0
投票

要扩展kgriffs,你必须做两件事来实际构建一个64位DLL而不是32位DLL。

首先通过CVS下载最新的pthreads(如建议的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是由SDK(VS 2010 Express plus SDK 7.1)提供的Visual Studio命令提示符设置的环境变量.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。

© www.soinside.com 2019 - 2024. All rights reserved.