использование SWIG с C++



Привет всем



Я пытаюсь использовать SWIG для экспорта кода C++ в Python.
Пример C, который я прочитал на веб-сайте, действительно работает, но у меня есть проблема с кодом C++.



Вот строки, которые я называю




swig -c++ -python SWIG_TEST.i
g++ -c -fPIC SWIG_TEST.cpp SWIG_TEST_wrap.cxx -I/usr/include/python2.4/
gcc --shared SWIG_TEST.o SWIG_TEST_wrap.o -o _SWIG_TEST.so -lstdc++


Когда я закончу, я получу следующее сообщение об ошибке




ImportError: ./_SWIG_TEST.so: undefined symbol: Py_InitModule4


Вы знаете, что это такое?
517   3  

3 ответов:

Похоже, что вы не ссылаетесь на библиотеку времени выполнения Python. Что-то вроде добавления -lpython24 в строку gcc. (В данный момент у меня нет под рукой системы Linux).

Можно попробовать построить общую библиотеку с помощью gcc

g++ -shared SWIG_TEST.o SWIG_TEST_wrap.o -o _SWIG_TEST.so

Вместо того, чтобы использовать ld напрямую.

Как сказал Марк, это проблема, связанная с библиотекой python. Хороший способ получить подсказки о том, какие именно флаги вам нужно успешно связать, можно получить, запустив python-config --ldflags. На самом деле, особенно безболезненным способом составления вашего теста является следующее:

swig -c++ -python SWIG_TEST.i
g++ -c `python-config --cflags` -fPIC SWIG_TEST.cpp SWIG_TEST_wrap.cxx
gcc --shared `python-config --ldflags` SWIG_TEST.o SWIG_TEST_wrap.o -o _SWIG_TEST.so -lstdc++
Обратите внимание, что python-config не идеален; он иногда дает вам дополнительные вещи или конфликтующие вещи. Но это, безусловно, должно очень помочь.

Comments

    Ничего не найдено.