использование 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
Вы знаете, что это такое?
3 ответов:
Похоже, что вы не ссылаетесь на библиотеку времени выполнения Python. Что-то вроде добавления
-lpython24в строку gcc. (В данный момент у меня нет под рукой системы Linux).
Можно попробовать построить общую библиотеку с помощью
gccg++ -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