extern "C"
не прописан, сейчас уже бессмысленно его прописывать. Это инструкция компилятору экспортировать одно только имя функции как оно есть (добавив только _ спереди) и не засовывать туда типы арументов и результата, чтобы можно было различать перегруженные функции. Если это не сделано при компиляции (а это не сделано), то имена уже не такие. Кроме того, у вас тут еще и классы имеются — их вообще нельзя в стиле С экспортировать. (Если нужно работать с С++ классом из С, обычно приходится писать раздельные заголовки, объявляя класс как структуру, давая другие сигнатуры функций — что-то вроде такого.)extern "C"
, а среди невнятных имен, которые выдает dumpbin
, есть называния таких функций? Если так, то да, эти имена вы сможете подцепить через def
-файл и ссылка которую он приводит, как раз в тему.extern "C"
там, где могут, что пишут далее, что функция, не объявленная таким образом и C++ класс не будут доступными при вызове из другой среды (например, MS VC++): The important and often overlooked consequence of this is that from the above DLL only the functionshello(const char *)
andDouble(int)
are seamlessly callable from e.g. MS VC++ whileCppFunc(void)
is not (assuming the DLL is created by MinGW).
A similar statement goes for C++ classes exported in a DLL, i.e. for the classMyClass
. For further reading search the Web for the keyword «ABI» and possible in conjunction with «C++».
A way to circumvent this problem is either using COM or create C-style wrapper functions to encapsulate the C++ ABI.
xmpppy
, и в зависимости от этого предоставлять дополнительные возможности. Например, многие не-GPL программы (Python, sqlite) используют GNU readline
, если она есть, хотя readline
распространяется под GPL. Главное, чтобы помимо xmpppy
был полезный функционал. Ei
— это тип параметра int
, а Ev
— void
. Но, по-моему, это не Microsoft'овский компилятор. Что-то даже с примерным описанием разных схем name mangling трудно сказать, чем это собрано. Вроде похоже на GCC, но не совсем. .lib
так:lib.exe /EXPORT:<имя в MS-стиле>=<реальное имя> mylib.dll
.h
-файла), но не находит его в предложенных к линковке объектных файлах и библиотеках. Похоже на то, что просто библиотеки нет в списке линковки. -miphoneos-version-min=4.2
. Другой вопрос, как менять это 4.2 на другое значение.Cython is a language that makes writing C extensions for the Python language as easy as Python itself. Cython is based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.
The Cython language is very close to the Python language, but Cython additionally supports calling C functions and declaring C types on variables and class attributes. This allows the compiler to generate very efficient C code from Cython code.
This makes Cython the ideal language for wrapping external C libraries, and for fast C modules that speed up the execution of Python code.