используя SWIG с C ++ - PullRequest
2 голосов
/ 02 августа 2010

HI all

Я пытаюсь использовать 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 ]

4 голосов
/ 03 августа 2010

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

1 голос
/ 14 февраля 2012

Как сказал Марк, это проблема с подключением к библиотеке 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 не идеален;иногда это дает вам дополнительные вещи или противоречивые вещи.Но это, безусловно, должно сильно помочь.

1 голос
/ 02 августа 2010

вы можете попробовать создать общую библиотеку, используя gcc

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

вместо непосредственного использования ld.

...