загрузить dll из python
-
03-07-2019 - |
Вопрос
Я создаю приложение на Python из некоторого исходного кода, который я нашел Здесь
Мне удалось скомпилировать и устранить некоторые проблемы путем поиска в Интернете, но на этом этапе я застрял:
При запуске приложения появляется это сообщение.
альтернативный текст http://img511.imageshack.us/img511/4481/loadfr0.png
Это приложение на python использует swig для ссылки на код c / c ++.
У меня есть VC ++ 2005 express edition, который я использовал для компиляции вместе с scons и Python 2.5 (и попробовал 2.4 тоже)
Библиотеки DLL, которые пытаются загрузить, имеют значение "msvcr80.dll", потому что до этого сообщение было "msvcr80.dll" не может быть найдено или что-то в этом роде, поэтому я получил его и поместил в папку window32.
За то, что я прочитал здесь:http://msdn.microsoft.com/en-us/library/ms235591 (ПРОТИВ 80).aspx
Решение состоит в том, чтобы запустить MT с манифестом и DLL-файлом.Я уже сделал это, но тоже не работает.
Может ли кто-нибудь указать мне правильное направление?
Это содержание манифеста тьфу:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
Сейчас я собираюсь попробовать Python 2.6, я не совсем уверен в понимании проблемы, но в Python 2.5 и Python 2.5 .exe была строка "MSVCR71.dll" внутри EXE-файла .Но, вероятно, это не имеет никакого отношения к делу.
ps.если бы только все было так же просто, как файлы jar:(
Это трассировка стека для полноты картины
None
INFO:root:Skipping provider enso.platform.osx.
INFO:root:Skipping provider enso.platform.linux.
INFO:root:Added provider enso.platform.win32.
Traceback (most recent call last):
File "scripts\run_enso.py", line 24, in <module>
enso.run()
File "C:\oreyes\apps\enso\enso-read-only\enso\__init__.py", line 40, in run
from enso.events import EventManager
File "C:\oreyes\apps\enso\enso-read-only\enso\events.py", line 60, in <module>
from enso import input
File "C:\oreyes\apps\enso\enso-read-only\enso\input\__init__.py", line 3, in <module>
_input = enso.providers.getInterface( "input" )
File "C:\oreyes\apps\enso\enso-read-only\enso\providers.py", line 137, in getInterface
interface = provider.provideInterface( name )
File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\__init__.py", line 48, in provideInterface
import enso.platform.win32.input
File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\input\__init__.py", line 3, in <module>
from InputManager import *
File "C:\oreyes\apps\enso\enso-read-only\enso\platform\win32\input\InputManager.py", line 7, in <module>
import _InputManager
ImportError: DLL load failed: Error en una rutina de inicializaci¾n de biblioteca de vÝnculos dinßmicos (DLL).
Решение
Я смог скомпилировать и запустить Enso, используя / LD в качестве флага компилятора.Это динамически связывается со средой выполнения MS Visual C ++ и, похоже, позволяет вам обходиться без манифеста.
Если вы используете SCons, смотрите файл diff здесь: http://paste2.org/p/69732
Другие советы
Глядя на ваше обновление, похоже, что вам нужно установить Пикайро поскольку вам не хватает модуля _cairo, установленного как часть Pycairo.Смотрите на Страница загрузки Pycairo для получения инструкций о том, как получить / установить двоичные файлы для Windows.
Вероятно, вам необходимо установить распространяемые файлы среды выполнения VC ++.Ссылки на них следующие здесь.
Обновить Я скачал python2.6 и VS C ++ express edition 2008, и проблема с msvcr80.dll исчезла (я предполагаю, потому что Python и VSC ++ 2008xe используют msvscr90.dll)
Я скомпилировал с / LD и все изменения, перечисленные здесь: http://paste2.org/p/69732
И теперь проблема вытекает:
INFO:root:Skipping provider enso.platform.osx.
INFO:root:Skipping provider enso.platform.linux.
INFO:root:Added provider enso.platform.win32.
INFO:root:Obtained interface 'input' from provider 'enso.platform.win32'.
Traceback (most recent call last):
File "scripts\run_enso.py", line 23, in <module>
enso.run()
File "C:\oreyes\apps\enso\enso-comunity\enso\__init__.py", line 41, in run
from enso.quasimode import Quasimode
File "C:\oreyes\apps\enso\enso-comunity\enso\quasimode\__init__.py", line 62, in <module>
from enso.quasimode.window import TheQuasimodeWindow
File "C:\oreyes\apps\enso\enso-comunity\enso\quasimode\window.py", line 65, in <module>
from enso.quasimode.linewindows import TextWindow
File "C:\oreyes\apps\enso\enso-comunity\enso\quasimode\linewindows.py", line 44, in <module>
from enso import cairo
File "C:\oreyes\apps\enso\enso-comunity\enso\cairo.py", line 3, in <module>
__cairoImpl = enso.providers.getInterface( "cairo" )
File "C:\oreyes\apps\enso\enso-comunity\enso\providers.py", line 137, in getInterface
interface = provider.provideInterface( name )
File "C:\oreyes\apps\enso\enso-comunity\enso\platform\win32\__init__.py", line 61, in provideInterface
import enso.platform.win32.cairo
File "C:\oreyes\apps\enso\enso-comunity\enso\platform\win32\cairo\__init__.py", line 1, in <module>
from _cairo import *
ImportError: No module named _cairo