我已经在作者网站上发布了这个问题,但我想我也可以在这里问。
我一直在尝试使用此设置安装 pylzma:
- 视窗 7 x64
- Python 2.6.6 x64
- 来自 windows server 2003 sdk 的 amd64 编译器
- 克隆了 git repo git://github.com/fancycode/pylzma.git
通过一个简单的easy_install pylzma
我得到了这个:
cl : 命令行警告 D9025 : 用 '/MT' 覆盖 '/MD' pylzma.c src/pylzma/pylzma.c(85) : 警告 C4244: '=' : 从 'Py_ssize_t' 转换为 'int',可能会丢失数据的
src/pylzma/pylzma.c(102) : 错误 C2275: 'CSha256' : 非法使用这种类型作为表达式 c:\users\xavier.lapointe\appdata\local\temp\easy_install-2mfkqu\pylzma-0.4.3 \src\pylzma../7zip/C/Sha256.h(18) :参见“CSha256”的声明
src/pylzma/pylzma.c(102):错误 C2146:语法错误:缺少“;” 在标识符“sha”之前
src/pylzma/pylzma.c(102):错误 C2065:“sha”:未声明的标识符
src/pylzma/pylzma.c(103):错误 C2065:“sha”:未声明的标识符
src/pylzma/pylzma.c(103) : 警告 C4133: 'function' : 不兼容的类型 - 从 'int *' 到 'CSha256 *'
src/pylzma/pylzma.c(104):错误 C2143:语法错误:缺少“;” 在“类型”之前
src/pylzma/pylzma.c(105):错误 C2143:语法错误:缺少“;” 在“类型”之前
src/pylzma/pylzma.c(106):错误 C2143:语法错误:缺少“;” 在“类型”之前
src/pylzma/pylzma.c(107):错误 C2143:语法错误:缺少“;” 在“类型”之前
src/pylzma/pylzma.c(108):错误 C2065:'round':未声明的标识符
src/pylzma/pylzma.c(108):错误 C2065:'round':未声明的标识符
src/pylzma/pylzma.c(108):错误 C2065:'rounds':未声明的标识符
src/pylzma/pylzma.c(108):错误 C2065:'round':未声明的标识符
src/pylzma/pylzma.c(109):错误 C2065:“sha”:未声明的标识符
src/pylzma/pylzma.c(109) : 警告 C4133: 'function' : 不兼容的类型 - 从 'int *' 到 'CSha256 *'
src/pylzma/pylzma.c(110):错误 C2065:“sha”:未声明的标识符
src/pylzma/pylzma.c(110) : 警告 C4133: 'function' : 不兼容的类型 - 从 'int *' 到 'CSha256 *'
src/pylzma/pylzma.c(111):错误 C2065:“sha”:未声明的标识符
src/pylzma/pylzma.c(111) : 警告 C4133: 'function' : 不兼容的类型 - 从 'int *' 到 'CSha256 *'
src/pylzma/pylzma.c(111):错误 C2065:'temp':未声明的标识符
src/pylzma/pylzma.c(112):错误 C2065:'i':未声明的标识符
src/pylzma/pylzma.c(112):错误 C2065:'i':未声明的标识符
src/pylzma/pylzma.c(112):错误 C2065:'i':未声明的标识符
src/pylzma/pylzma.c(113):错误 C2065:'temp':未声明的标识符
src/pylzma/pylzma.c(113):错误 C2065:'i':未声明的标识符
src/pylzma/pylzma.c(113):错误 C2109:下标需要数组或指针类型
src/pylzma/pylzma.c(116):错误 C2065:'sha':未声明的标识符
src/pylzma/pylzma.c(116) : 警告 C4133: 'function' : 不兼容的类型 - 从 'int *' 到 'CSha256 *'
错误:安装脚本退出并出现错误:命令 '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe"' 失败,退出状态为 2
然后在谷歌搜索后我认为这是关于编译器(c90 vs c99),有些人建议将.c扩展名更改为.cpp。所以我这样做并相应地更改了 setup.py (主要是文件名)。
然后成功,它在 CpuArch.c(pp) 和另一个有语法错误的文件中进行了一些调整后编译。
现在的问题是链接器扼流圈:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\dev\pylzma\build\temp.win-amd64-2.6 \Release\src\pylzma /LIBPATH:C:\Python26\libs /LIBPATH:C:\Python26\PCbuild\amd64 user32.lib oleaut32.lib /EXPORT:initpylzma build\temp.win-amd64-2.6\Release\src/ pylzma/pylzma.obj build\temp.win-amd64-2.6\Release\src/pylzma/pylzma_decompressobj.obj build\temp.win-amd64-2.6\Release\src/pylzma/pylzma_compressfile.obj build\temp.win-amd64 -2.6\Release\src/pylzma/pylzma_decompress.obj build\temp.win-amd64-2.6\Release\src/pylzma/pylzma_compress.obj build\temp.win-amd64-2.6\Release\src/pylzma/pylzma_streams.obj build\temp.win-amd64-2.6\Release\src/pylzma/pylzma_aes.obj build\temp.win-amd64-2.6\Release\src/pylzma/pylzma_decompress_compat.obj build\temp.win-amd64-2。6\Release\src/pylzma/pylzma_decompressobj_compat.obj build\temp.win-amd64-2.6\Release\src\sdk\LzFind.obj build\temp.win-amd64-2.6\Release\src\sdk\LzmaDec.obj build \temp.win-amd64-2.6\Release\src\sdk\LzmaEnc.obj build\temp.win-amd64-2.6\Release\src\7zip\C\CpuArch.obj build\temp.win-amd64-2.6\Release \src\7zip\C\Aes.obj build\temp.win-amd64-2.6\Release\src\7zip\C\AesOpt.obj build\temp.win-amd64-2.6\Release\src\7zip\C\Sha256 .obj build\temp.win-amd64-2.6\Release\src\compat\LzmaCompatDecode.obj build\temp.win-amd64-2.6\Release\src/sdk/LzFindMt.obj build\temp.win-amd64-2.6\ Release\src/sdk/Threads.obj /OUT:build\lib.win-amd64-2.6\pylzma.pyd /IMPLIB:build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.lib /MANIFESTFILE: build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.pyd.manifestwin-amd64-2.6\Release\src\sdk\LzFind.obj build\temp.win-amd64-2.6\Release\src\sdk\LzmaDec.obj build\temp.win-amd64-2.6\Release\src\sdk\ LzmaEnc.obj build\temp.win-amd64-2.6\Release\src\7zip\C\CpuArch.obj build\temp.win-amd64-2.6\Release\src\7zip\C\Aes.obj build\temp.win -amd64-2.6\Release\src\7zip\C\AesOpt.obj build\temp.win-amd64-2.6\Release\src\7zip\C\Sha256.obj build\temp.win-amd64-2.6\Release\src \compat\LzmaCompatDecode.obj build\temp.win-amd64-2.6\Release\src/sdk/LzFindMt.obj build\temp.win-amd64-2.6\Release\src/sdk/Threads.obj /OUT:build\lib .win-amd64-2.6\pylzma.pyd /IMPLIB:build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.lib /MANIFESTFILE:build\temp.win-amd64-2.6\Release\src/pylzma \pylzma.pyd.manifestwin-amd64-2.6\Release\src\sdk\LzFind.obj build\temp.win-amd64-2.6\Release\src\sdk\LzmaDec.obj build\temp.win-amd64-2.6\Release\src\sdk\ LzmaEnc.obj build\temp.win-amd64-2.6\Release\src\7zip\C\CpuArch.obj build\temp.win-amd64-2.6\Release\src\7zip\C\Aes.obj build\temp.win -amd64-2.6\Release\src\7zip\C\AesOpt.obj build\temp.win-amd64-2.6\Release\src\7zip\C\Sha256.obj build\temp.win-amd64-2.6\Release\src \compat\LzmaCompatDecode.obj build\temp.win-amd64-2.6\Release\src/sdk/LzFindMt.obj build\temp.win-amd64-2.6\Release\src/sdk/Threads.obj /OUT:build\lib .win-amd64-2.6\pylzma.pyd /IMPLIB:build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.lib /MANIFESTFILE:build\temp.win-amd64-2.6\Release\src/pylzma \pylzma.pyd.manifest6\Release\src\sdk\LzmaEnc.obj build\temp.win-amd64-2.6\Release\src\7zip\C\CpuArch.obj build\temp.win-amd64-2.6\Release\src\7zip\C\ Aes.obj build\temp.win-amd64-2.6\Release\src\7zip\C\AesOpt.obj build\temp.win-amd64-2.6\Release\src\7zip\C\Sha256.obj build\temp.win -amd64-2.6\Release\src\compat\LzmaCompatDecode.obj build\temp.win-amd64-2.6\Release\src/sdk/LzFindMt.obj build\temp.win-amd64-2.6\Release\src/sdk/Threads .obj /OUT:build\lib.win-amd64-2.6\pylzma.pyd /IMPLIB:build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.lib /MANIFESTFILE:build\temp.win-amd64 -2.6\发布\src/pylzma\pylzma.pyd.manifest6\Release\src\sdk\LzmaEnc.obj build\temp.win-amd64-2.6\Release\src\7zip\C\CpuArch.obj build\temp.win-amd64-2.6\Release\src\7zip\C\ Aes.obj build\temp.win-amd64-2.6\Release\src\7zip\C\AesOpt.obj build\temp.win-amd64-2.6\Release\src\7zip\C\Sha256.obj build\temp.win -amd64-2.6\Release\src\compat\LzmaCompatDecode.obj build\temp.win-amd64-2.6\Release\src/sdk/LzFindMt.obj build\temp.win-amd64-2.6\Release\src/sdk/Threads .obj /OUT:build\lib.win-amd64-2.6\pylzma.pyd /IMPLIB:build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.lib /MANIFESTFILE:build\temp.win-amd64 -2.6\发布\src/pylzma\pylzma.pyd.manifestobj build\temp.win-amd64-2.6\Release\src\compat\LzmaCompatDecode.obj build\temp.win-amd64-2.6\Release\src/sdk/LzFindMt.obj build\temp.win-amd64-2.6\Release \src/sdk/Threads.obj /OUT:build\lib.win-amd64-2.6\pylzma.pyd /IMPLIB:build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.lib /MANIFESTFILE:build \temp.win-amd64-2.6\Release\src/pylzma\pylzma.pyd.manifestobj build\temp.win-amd64-2.6\Release\src\compat\LzmaCompatDecode.obj build\temp.win-amd64-2.6\Release\src/sdk/LzFindMt.obj build\temp.win-amd64-2.6\Release \src/sdk/Threads.obj /OUT:build\lib.win-amd64-2.6\pylzma.pyd /IMPLIB:build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.lib /MANIFESTFILE:build \temp.win-amd64-2.6\Release\src/pylzma\pylzma.pyd.manifest
pylzma.obj:警告 LNK4197:多次指定导出“initpylzma”;使用第一个规范创建库 build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.lib 和对象 build\temp.win-amd64-2.6\Release\src/pylzma\pylzma.exp
pylzma.obj:错误 LNK2001:未解析的外部符号“char const * const doc_decompress”(?doc_decompress@@3QBDB)
pylzma.obj:错误 LNK2001:无法解析的外部符号“struct _object * __cdecl pylzma_decompress(struct _object *,struct _object *)”(?pylzma_decompress@@YAPEAU_object@@PEAU1@0@Z)
pylzma.obj:错误 LNK2001:未解析的外部符号“char const * const doc_compress”(?doc_compress@@3QBDB)
Aes.obj:错误 LNK2019:函数 AesGenTables 中引用的未解析外部符号“void __cdecl AesCtr_Code_Intel(unsigned int *,unsigned char *,unsigned __int64)”(?AesCtr_Code_Intel@@YAXPEAIPEAE_K@Z)
Aes.obj:错误 LNK2019:函数 AesGenTables 中引用的未解析外部符号“void __cdecl AesCbc_Decode_Intel(unsigned int *,unsigned char *,unsigned __int64)”(?AesCbc_Decode_Intel@@YAXPEAIPEAE_K@Z)
Aes.obj:错误 LNK2019:函数 AesGenTables 中引用的未解析外部符号“void __cdecl AesCbc_Encode_Intel(unsigned int *,unsigned char *,unsigned __int64)”(?AesCbc_Encode_Intel@@YAXPEAIPEAE_K@Z)
AesOpt.obj:错误 LNK2019:函数“void __cdecl AesCbc_Encode_Intel(union __m128i *,union __m128i *,unsigned __int64)”中引用的未解析外部符号 _mm_aesenclast_si128 (?AesCbc_Encode_Intel@@YAXPEAT__m128i@@0_K@Z)
AesOpt.obj:错误 LNK2019:函数“void __cdecl AesCbc_Encode_Intel(union __m128i *,union __m128i *,unsigned __int64)”中引用的未解析外部符号 _mm_aesenc_si128 (?AesCbc_Encode_Intel@@YAXPEAT__m128i@@0_K@Z)
AesOpt.obj:错误 LNK2019:函数“void __cdecl AesCbc_Decode_Intel(union __m128i *,union __m128i *,unsigned __int64)”中引用的未解析外部符号 _mm_aesdeclast_si128 (?AesCbc_Decode_Intel@@YAXPEAT__m128i@@0_K@Z)
AesOpt.obj:错误 LNK2019:未解析的外部符号 _mm_aesdec_si128 在函数“void __cdecl AesCbc_Decode_Intel(union __m128i *,union __m128i *,unsigned __int64)”(?AesCbc_Decode_Intel@@YAXPEAT__m128i@@0_K@Z) build\lib.win-amd6 中引用-2.6\pylzma.pyd:致命错误 LNK1120:10 个未解决的外部
错误:命令 '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\link.exe"' 失败,退出状态为 1120
现在我很难弄清楚这些链接器问题是什么,即使使用 msdn doc(关于链接器错误)也是如此。可能是由于我缺乏 C/C++ 知识。
所以基本上我的问题是:
- 有没有办法解决这些链接器问题?
- 将这些文件从 .c 重命名为 .cpp 我错了吗?如果是,是否可以使用 msvc amd64 编译器将其编译为 .c?
编辑 没有太多答案,所以我想我会添加一些问题:
当涉及到链接器错误时,您的方法是什么?
有什么逻辑可以帮助我自己在网上找到答案(结合这个MSDN 链接器错误)?
由于我已经看到很多人为 32 位系统成功编译它,它是否有可能在 64 位系统中编译良好,但由于架构类型而在链接时失败?
我正在寻找更多可能有用的提示,而不是完全有效的答案。
非常感谢你的帮助 (: