Я пытался установить pylzma с такой настройкой: p>
- Windows 7 x64
- Python 2.6.6 x64
- скоро появится компилятор amd64 из Windows Server 2003 SDK
- клонировал репозиторий git git://github.com/fancycode/pylzma.git
cl : Предупреждение командной строки D9025 :
переопределение '/MD' с помощью '/MT' 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 *'
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: «круглый» : необъявленный идентификатор
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 *'
C2065: 'sha' : необъявленный идентификатор
src/pylzma/pylzma.c(110) : предупреждение
C4133: 'function': несовместимые типы
- от 'int *' до 'CSha256 *'
C2065: 'sha': необъявленный идентификатор
src/pylzma/pylzma.c(111): предупреждение
C4133: 'function': несовместимые типы
- от 'int *' до 'CSha256 *'
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': несовместимые типы< /p>
- от «int *» до «CSha256 *»
команда '"C:\Program Files
(x86)\Microsoft Visual Studio
9.0\VC\BIN\amd64\cl.exe"' не выполнена со статусом выхода 2< /p>
Затем, погуглив, я понял, что дело в компиляторе (c90 против c99), некоторые люди предложили изменить расширение .c на .cpp. Итак, я сделал это и соответствующим образом изменил файл setup.py (в основном имена файлов).
Затем он успешно компилируется после нескольких изменений в CpuArch.c(pp) и еще одном файле с синтаксисом. ошибки.
Теперь дело в дросселе компоновщика:
C:\Program Files (x86)\MicrosoftVisual 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
/ ЭКСПОРТ:initpylzma
build\temp.win-amd64-2.6\Release\src/pylzma/pylzma.obj
build\temp.win-amd64-2.6\Release\src/pylzma/pylzma_decompressobj.objbuild\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.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: неразрешенный
внешний символ "void __cdecl
AesCtr_Code_Intel(unsigned int
*, unsigned char *, unsigned __int64)" (?AesCtr_Code_Intel@@YAXPEAIPEAE_K@Z)
ссылается на функцию AesGenTables
Aes.obj: ошибка LNK2019: неразрешенный
внешний символ "void __cdecl
AesCbc_Decode_Intel (unsigned int
*, unsigned char *, unsigned __int64)" (?AesCbc_Decode_Intel@@YAXPEAIPEAE_K@Z)
ссылается на функцию AesGenTables
Aes.obj: ошибка LNK2019: неразрешенный
внешний символ "void __cdecl
AesCbc_Encode_Intel(unsigned int
*,unsigned char *,unsigned __int64)" (?AesCbc_Encode_Intel@@YAXPEAIPEAE_K@Z)
ссылается в функции AesGenTables
AesOpt.obj: ошибка LNK2019: неразрешенная
внешний символ _mm_aesenclast_si128
указан в функции "void __cdecl
AesCbc_Encode_Intel(union __m128i
* ,union __m128i *,unsigned __int64)" (?AesCbc_Encode_Intel@@YAXPEAT__m128i@@0_K@Z)
AesOpt.obj: ошибка LNK2019: неразрешенный
внешний символ _mm_aesenc_si128
ссылается на функцию "void __cdecl
AesCbc_Encode_Intel(union __m128i
*,union __m128i *,unsigned __int64)" (?AesCbc_Encode_Intel@@YAXPEAT__m128i@@0_K@Z)
AesOpt.obj: ошибка LNK2019: неразрешенный
внешний символ _mm_aesdeclast_si128
, указанный в функции «void __cdecl
AesCbc_Decode_Intel(union __m128i
*,union __m128i *,unsigned __int64)» ( ?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-amd64-2.6\pylzma.pyd :Неустранимая ошибка LNK1120: 10 неразрешенных
внешних
ошибка: команда '"C:\Program Files
(x86)\Microsoft Visual Studio
9.0\VC\BIN\amd64\link.exe"' не удалось со статусом выхода 1120
Теперь мне трудно понять, что это за Проблемы с компоновщиком есть, даже с документом msdn (об ошибке компоновщика). Вероятно, из-за отсутствия у меня знаний C/C++.
Итак, в основном мои вопросы:
- Есть ли способ исправить эти проблемы с компоновщиком?
- Я ошибаюсь, переименовывая эти файлы с .c на .cpp. Если да, можно ли скомпилировать его как .c с помощью компилятора msvc amd64?
Haven не получил много ответов, поэтому думаю добавить несколько вопросов:
- Каков ваш подход, когда дело доходит до ошибки компоновщика?
- Есть ли какая-то логика, которой я могу следовать, чтобы помочь себе найти ответы в Интернете (в сочетании с ошибками компоновщика MSDN)?
- Поскольку я видел, как многие люди успешно компилировали его для 32-битной системы, возможно ли, что он нормально компилируется в 64-битной системе, но не удается при компоновке из-за тип архитектуры?
Подробнее здесь: https://stackoverflow.com/questions/476 ... on-binding