你如何为x64编译静态pthread-win32 lib?
题
看起来已经做了一些工作来使 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。