Pavel3333 Posted May 18, 2018 Share Posted May 18, 2018 Скомпилировал при помощи GCC пид из исходника, сгенерированного в Cython. С одним пидом, который принтит строку, всё ок. Второй при импортировании дает такую ошибку: *** [XFW/Entrypoint] Error: *** Traceback (most recent call last): *** File "scripts/client/gui/mods/mod_.py", line 51, in <module> *** File "mods/xfw/python/xfw_loader.py", line 196, in <module> *** File "mods/xfw/python/xfw_loader.py", line 179, in xfw_load_mods *** UnicodeDecodeError: 'utf8' codec can't decode byte 0xcd in position 17: invalid continuation byte Компилировать в VS не могу, так как нужна пакетная компиляция множества пидов. команды GCC: gcc -shared -W -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -ansi -IC:\Python27\include -LC:\Python27\libs -o %s.pyd %s.c -lpython27 Версия XFW: 948 @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 18, 2018 Share Posted May 18, 2018 >GCC несовместимо, только MSVC 2015/2017 @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 18, 2018 Author Share Posted May 18, 2018 @Mixaill это тот который Cl.exe или MSBuild.exe? @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 18, 2018 Share Posted May 18, 2018 1 час назад, Pavel3333 сказал: Компилировать в VS не могу, так как нужна пакетная компиляция множества пидов. И что мешает? MSBuild, Cmake, Meson, десятки билдсистем с поддержкой MSVC. Только что, Pavel3333 сказал: это тот который Cl.exe или MSBuild.exe? Это слабосвязаные вещи, C1 - это собственно компилятор, MSBuild - это система сборки. @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 18, 2018 Author Share Posted May 18, 2018 @Mixaill у меня в одной папке содержатся (допустим) куча .c-файлов, и каждый мне нужно построить в пид. И на 400 файлов придется делать 400 проектов. Хотя хотелось бы в 1 команду всё сделать и без кучи папок для проектов. Как и чем это можно сделать? (ночь сейчас, я перекурил доки, потому не могу допетрить как это осуществить). Кажется, нашел...https://msdn.microsoft.com/ru-ru/library/610ecb4h.aspx попробую запилить на CL.exe. @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 18, 2018 Share Posted May 18, 2018 Сходу на CMake cmake_minimum_required (VERSION 3.0) project(manypyds LANGUAGES C) find_package(libpython REQUIRED) function(CreatePydProject FILENAME) get_filename_component(NAME "${FILENAME}" NAME_WE) add_library(${NAME} SHARED "${FILENAME}") target_compile_definitions(${NAME} PRIVATE "_CRT_SECURE_NO_WARNINGS") target_link_libraries(${NAME} libpython::python27) set_target_properties(${NAME} PROPERTIES SUFFIX ".pyd") set_target_properties(${NAME} PROPERTIES LINK_FLAGS "/INCREMENTAL:NO") install(TARGETS ${NAME} RUNTIME DESTINATION ".") endfunction() file(GLOB_RECURSE SOURCES "*.c") foreach(SOURCE ${SOURCES}) CreatePydProject(${SOURCE}) endforeach() Тут больше вопрос, откуда вообще появилось 400 файлов, каждый из которых должен быть собран в свою библиотеку. 1 час назад, Pavel3333 сказал: C:\Python27\include компилировать с ванильными хидерами нельзя, видимо в этом и проблема @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 19, 2018 Author Share Posted May 19, 2018 4 часа назад, Mixaill сказал: Тут больше вопрос, откуда вообще появилось 400 файлов, каждый из которых должен быть собран в свою библиотеку. Когда запилю, обязательно расскажу ;) 4 часа назад, Mixaill сказал: Сходу на CMake Спасибо! 4 часа назад, Mixaill сказал: компилировать с ванильными хидерами нельзя, видимо в этом и проблема не знал об этом. @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 19, 2018 Author Share Posted May 19, 2018 11 часов назад, Mixaill сказал: Сходу на CMake не может найти libpython: Цитата By not providing "Findlibpython.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "libpython", but CMake did not find one. Could not find a package configuration file provided by "libpython" with any of the following names: libpythonConfig.cmake libpython-config.cmake Add the installation prefix of "libpython" to CMAKE_PREFIX_PATH or set "libpython_DIR" to a directory containing one of the above files. If "libpython" provides a separate development package or SDK, be sure it has been installed. @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 19, 2018 Share Posted May 19, 2018 (edited) - кладешь свои файлы в какой-нибудь C:\Test\sources (чтобы проще объяснять) - создаешь каталог C:\Test\sources\build - выкатываешь -devel архив и распаковываешь его (например, в C:\Test\xfwnative) - выполняешь в каталог C:\Test\sources\build команду cmake .. -DCMAKE_INSTALL_PREFIX=C:/Test/install -DCMAKE_PREFIX_PATH=C:/Test/xfwnative - выполняешь там же cmake --build . --target INSTALL --config RelWithDebInfo Edited May 19, 2018 by Mixaill 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 19, 2018 Author Share Posted May 19, 2018 (edited) @Mixaill Спасибо!!! 15 минут назад, Mixaill сказал: cmake --build . --target INSTALL --config RelWithDebInfo Цитата C:\WoTPython>cmake --build . --target INSTALL --config RelWithDebInfo Microsoft (R) Build Engine версии 15.6.85.37198 для .NET Framework (C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены. Сборка начата 19.05.2018 14:40:19. Проект "C:\WoTPython\INSTALL.vcxproj" в узле 1 (целевые объекты по умолчанию). Проект "C:\WoTPython\INSTALL.vcxproj" (1) выполняет сборку "C:\WoTPython\ZERO_C HECK.vcxproj" (2) в узле 1 (целевые объекты по умолчанию). PrepareForBuild: Создание каталога "Win32\RelWithDebInfo\ZERO_CHECK\". Создание каталога "C:\WoTPython\RelWithDebInfo\". Создание каталога "Win32\RelWithDebInfo\ZERO_CHECK\ZERO_CHECK.tlog\". InitializeBuildStatus: Создание "Win32\RelWithDebInfo\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild", так как было задано "AlwaysCreate". CustomBuild: Checking Build System CMake does not need to re-run because C:/WoTPython/CMakeFiles/generate.stamp is up-to-date. FinalizeBuildStatus: Файл "Win32\RelWithDebInfo\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" удал яется. Обращение к "Win32\RelWithDebInfo\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastb uildstate". Сборка проекта "C:\WoTPython\ZERO_CHECK.vcxproj" завершена (целевые объекты по умолчанию). Проект "C:\WoTPython\INSTALL.vcxproj" (1) выполняет сборку "C:\WoTPython\ALL_BU ILD.vcxproj" (3) в узле 1 (целевые объекты по умолчанию). Проект "C:\WoTPython\ALL_BUILD.vcxproj" (3) выполняет сборку "C:\WoTPython\test _.vcxproj" (4) в узле 1 (целевые объекты по умолчанию). PrepareForBuild: Создание каталога "test_.dir\RelWithDebInfo\". Создание каталога "test_.dir\RelWithDebInfo\test_.tlog\". InitializeBuildStatus: Создание "test_.dir\RelWithDebInfo\test_.tlog\unsuccessfulbuild", так как был о задано "AlwaysCreate". CustomBuild: Building Custom Rule C:/Test/sources/CMakeLists.txt CMake does not need to re-run because C:/WoTPython/CMakeFiles/generate.stamp is up-to-date. ClCompile: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\1 4.13.26128\bin\HostX86\x86\CL.exe /c /IC:\WoTPython\include\python2.7 /Zi /no logo /W3 /WX- /diagnostics:classic /O2 /Ob1 /Oy- /D WIN32 /D _WINDOWS /D NDEB UG /D _CRT_SECURE_NO_WARNINGS /D "CMAKE_INTDIR=\"RelWithDebInfo\"" /D test__E XPORTS /D _WINDLL /D _MBCS /Gm- /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"test_.dir\RelWithDebInfo\\" /Fd"test_.dir\RelWithDebInfo\vc141 .pdb" /Gd /TC /analyze- /FC /errorReport:queue C:\Test\sources\test_.c test_.c Link: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\1 4.13.26128\bin\HostX86\x86\link.exe /ERRORREPORT:QUEUE /OUT:"C:\WoTPython\Rel WithDebInfo\test_.pyd" /INCREMENTAL:NO /NOLOGO lib\python27.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess ='false'" /manifest:embed /DEBUG /PDB:"C:/WoTPython/RelWithDebInfo/test_.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:/WoTPython/Rel WithDebInfo/test_.lib" /MACHINE:X86 /SAFESEH /machine:X86 /DLL test_.dir\Rel WithDebInfo\test_.obj ╤ючфрхЄё сшсышюЄхър C:/WoTPython/RelWithDebInfo/test_.lib ш юс·хъЄ C:/WoT Python/RelWithDebInfo/test_.exp test_.obj : error LNK2019: ёё√ыър эр эхЁрчЁх°хээ√щ тэх°эшщ ёшьтюы __imp___PyObj ect_GetDictPtr т ЇєэъЎшш ___Pyx_CLineForTraceback [C:\WoTPython\test_.vcxproj] C:\WoTPython\RelWithDebInfo\test_.pyd : fatal error LNK1120: эхЁрчЁх°хээ√ї тэх° эшї ¤ыхьхэЄют: 1 [C:\WoTPython\test_.vcxproj] Сборка проекта "C:\WoTPython\test_.vcxproj" завершена (целевые объекты по умолч анию) с ошибкой. Сборка проекта "C:\WoTPython\ALL_BUILD.vcxproj" завершена (целевые объекты по у молчанию) с ошибкой. Сборка проекта "C:\WoTPython\INSTALL.vcxproj" завершена (целевые объекты по умо лчанию) с ошибкой. Ошибка сборки. "C:\WoTPython\INSTALL.vcxproj" (целевой объект по умолчанию) (1) -> "C:\WoTPython\ALL_BUILD.vcxproj" (целевой объект по умолчанию) (3) -> "C:\WoTPython\test_.vcxproj" (целевой объект по умолчанию) (4) -> (Link конечный объект) -> test_.obj : error LNK2019: ёё√ыър эр эхЁрчЁх°хээ√щ тэх°эшщ ёшьтюы __imp___PyO bject_GetDictPtr т ЇєэъЎшш ___Pyx_CLineForTraceback [C:\WoTPython\test_.vcxproj ] C:\WoTPython\RelWithDebInfo\test_.pyd : fatal error LNK1120: эхЁрчЁх°хээ√ї тэ х°эшї ¤ыхьхэЄют: 1 [C:\WoTPython\test_.vcxproj] Предупреждений: 0 Ошибок: 2 Прошло времени 00:00:04.13 C:\WoTPython>pause Для продолжения нажмите любую клавишу . . . PS: сейчас зашел в среду. Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp___PyObject_GetDictPtr в функции ___Pyx_AddTraceback Edited May 19, 2018 by Pavel3333 @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 19, 2018 Share Posted May 19, 2018 (edited) XFW.Native реализует Python/C неполностью, где-то на 70-75% в данном случае не хватает PyObject_GetDictPtr Edited May 19, 2018 by Mixaill @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 19, 2018 Author Share Posted May 19, 2018 @Mixaill понятно, спасибо. А с чем связано такое ограничение? урезанность танковой либы? @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 19, 2018 Share Posted May 19, 2018 Сейчас добавлю Python 2.7.7 экспортирует 1054 символов а меня слишком мало :) @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 19, 2018 Author Share Posted May 19, 2018 (edited) @Mixaill а научите? я тоже хочу в кишочках танкового питона копаться, только не знаю чем копать :) PS: сейчас убрал функцию AddTraceback. Минус стабильность, зато скомпилилось успешно. Edited May 19, 2018 by Pavel3333 @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 19, 2018 Share Posted May 19, 2018 (edited) com.modxvm.xfw.native_1.2.0.00047-devel.zip com.modxvm.xfw.native_1.2.0.00047.wotmod можно возвращать Edited May 19, 2018 by Mixaill @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 19, 2018 Author Share Posted May 19, 2018 Спасибо, работает! @Mixaill сейчас начал тестить пид, они загружаются на 25% быстрее простых py-скриптов. Но есть одно "но" - не печатает трейсбеки. В Cython можно прописать, чтобы печатало трейсы, нехитрой командой cython_runtime.cline_in_traceback=True. Но опять в XFW Native не хватило символа, на этот раз _PyObject_CallNoArg @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 19, 2018 Share Posted May 19, 2018 А не работает ли у тебя Cython в режиме Python 3? В Python 2.7 _PyObject_CallNoArg вроде как нет. @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 19, 2018 Author Share Posted May 19, 2018 (edited) @Mixaill PY_MAJOR_VERSION прописана как 2. Но проверок на версии в самом Cython'е нет - /* PyObjectCallNoArg.proto */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); #else #define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) #endif Кстати, такое чувство, что лучше всё-таки снять дефайн COMPILING_IN_CPYTHON и переключиться на PyPy Там всего три режима: #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 1 Edited May 19, 2018 by Pavel3333 @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted May 19, 2018 Share Posted May 19, 2018 Приведи лог ошибки, ты не верно указал отсутствующий символ. __Pyx_PyObject_CallNoArg - это не _PyObject_CallNoArg, и он реализуется ниже по файлу. @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted May 19, 2018 Author Share Posted May 19, 2018 @Mixaill test_.obj : error LNK2019: ёё√ыър эр эхЁрчЁх°хээ√щ тэх°эшщ ёшьтюы __imp__PyFunc tion_Type т ЇєэъЎшш ___Pyx_PyObject_CallNoArg [C:\WoTPython\test_.vcxproj] C:\WoTPython\Release\test_.pyd : fatal error LNK1120: эхЁрчЁх°хээ√ї тэх°эшї ¤ых ьхэЄют: 1 [C:\WoTPython\test_.vcxproj] @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.