Краткое описание
У меня есть DLL, запрограммированная в ADA с помощью GNAT. Я хочу скомпилировать с MSVC другую DLL на C в качестве оболочки для ADA_DLL, чтобы использовать ее с Python.
Я скомпилировал ada_DLL, затем сгенерировал файл .lib в соответствии с документацию gnat о MSVC. И, наконец, я попытался скомпилировать C_DLL с помощью Visual Studio, получив ошибку:
libmath.lib : fatal error LNK1127: library is corrupt
Обновление: в случае компиляции с помощью gcc, предложенного @Brian, я получаю следующий вывод:
>"C:\GNAT\2015\bin\gcc.exe" -c -IC:\Python27\include -o libmath_c.o libmath_c.c
>"C:\GNAT\2015\bin\gcc.exe" -shared -LC:\Python27\libs -L./ -l libmath -o DIVISION_CPP.pyd libmath_c.o -lpython27
.//libmath.lib: error adding symbols: Malformed archive
collect2.exe: error: ld returned 1 exit status
Что я пробовал и больше данных:
Я попытался импортировать ADA_DLL напрямую с ctypes в Python, и это работает, поэтому я считаю, что ADA_DLL правильно скомпилирована. Кроме того, забывать о C_DLL на самом деле не вариант.
Я сделал небольшой пример с модулем примера деления. Мой файл .def выглядит примерно так:
; dlltool -z libmath.def --export-all-symbols libmath.dll
EXPORTS
[...]
div @ 259
[...]
libmath_c.c:
#include "libmath_c.h"
PyObject* _wrap_DIVISION(PyObject *self, PyObject *args){
div(10, 2);
return Py_None;
}
__declspec(dllexport) void __cdecl initDIVISION_CPP(void){
Py_InitModule("DIVISION_CPP", LIB_METHODS_methods);
}
libmath_c.h:
#include <windows.h>
#include <stdio.h>
#include <Python.h>
PyObject* _wrap_DIVISION(PyObject *self, PyObject *args);
static PyMethodDef LIB_METHODS_methods[] = {
{ "CPP_DIVISION", _wrap_DIVISION, METH_VARARGS },
{NULL, NULL, 0, NULL} //Added as indicated by @Brian. Thanks!
};
__declspec(dllexport) void __cdecl initDIVISION_CPP(void);
Любая идея о том, что происходит? Любая помощь могла бы быть полезна. Спасибо!
adainit()
иadafinal()
? - person user_1818839   schedule 09.11.2016