Pavel3333 1,148 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 Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431075 Posted May 18, 2018 >GCC несовместимо, только MSVC 2015/2017 Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431076 Posted May 18, 2018 @Mixaill это тот который Cl.exe или MSBuild.exe? Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431077 Posted May 18, 2018 1 час назад, Pavel3333 сказал: Компилировать в VS не могу, так как нужна пакетная компиляция множества пидов. И что мешает? MSBuild, Cmake, Meson, десятки билдсистем с поддержкой MSVC. Только что, Pavel3333 сказал: это тот который Cl.exe или MSBuild.exe? Это слабосвязаные вещи, C1 - это собственно компилятор, MSBuild - это система сборки. Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431078 Posted May 18, 2018 @Mixaill у меня в одной папке содержатся (допустим) куча .c-файлов, и каждый мне нужно построить в пид. И на 400 файлов придется делать 400 проектов. Хотя хотелось бы в 1 команду всё сделать и без кучи папок для проектов. Как и чем это можно сделать? (ночь сейчас, я перекурил доки, потому не могу допетрить как это осуществить). Кажется, нашел...https://msdn.microsoft.com/ru-ru/library/610ecb4h.aspx попробую запилить на CL.exe. Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431079 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 Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431098 Posted May 19, 2018 4 часа назад, Mixaill сказал: Тут больше вопрос, откуда вообще появилось 400 файлов, каждый из которых должен быть собран в свою библиотеку. Когда запилю, обязательно расскажу ;) 4 часа назад, Mixaill сказал: Сходу на CMake Спасибо! 4 часа назад, Mixaill сказал: компилировать с ванильными хидерами нельзя, видимо в этом и проблема не знал об этом. Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431126 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 Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431128 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 Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431130 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 Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431132 Posted May 19, 2018 (edited) XFW.Native реализует Python/C неполностью, где-то на 70-75% в данном случае не хватает PyObject_GetDictPtr Edited May 19, 2018 by Mixaill Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431133 Posted May 19, 2018 @Mixaill понятно, спасибо. А с чем связано такое ограничение? урезанность танковой либы? Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431134 Posted May 19, 2018 Сейчас добавлю Python 2.7.7 экспортирует 1054 символов а меня слишком мало :) Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431135 Posted May 19, 2018 (edited) @Mixaill а научите? я тоже хочу в кишочках танкового питона копаться, только не знаю чем копать :) PS: сейчас убрал функцию AddTraceback. Минус стабильность, зато скомпилилось успешно. Edited May 19, 2018 by Pavel3333 Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431137 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 Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431138 Posted May 19, 2018 Спасибо, работает! @Mixaill сейчас начал тестить пид, они загружаются на 25% быстрее простых py-скриптов. Но есть одно "но" - не печатает трейсбеки. В Cython можно прописать, чтобы печатало трейсы, нехитрой командой cython_runtime.cline_in_traceback=True. Но опять в XFW Native не хватило символа, на этот раз _PyObject_CallNoArg Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431142 Posted May 19, 2018 А не работает ли у тебя Cython в режиме Python 3? В Python 2.7 _PyObject_CallNoArg вроде как нет. Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431143 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 Share this post Link to post Short link Share on other sites
Mixaill 1,740 #431144 Posted May 19, 2018 Приведи лог ошибки, ты не верно указал отсутствующий символ. __Pyx_PyObject_CallNoArg - это не _PyObject_CallNoArg, и он реализуется ниже по файлу. Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #431145 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 Share this post Link to post Short link Share on other sites