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

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

有帮助吗?

解决方案 2

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

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

其他提示

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

我是这样做的(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错误行为。

此消息可能有所帮助。

扩展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是由Visual Studio命令提示符设置的环境变量   由SDK提供(VS 2010 Express plus SDK 7.1)   PLATFORM是可以在VS 2013 Express x64交叉中设置的环境变量   发展环境

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

设置TARGET_CPU = x64  设置PLATFORM = x64

3)现在是最后一步:

nmake clean VC  nmake clean VC-debug

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top