2010-10-08 5 views
6

Я реализую программу на C++, которая использует расширения python/C++. На данный момент я явно привязываю свою программу к статической библиотеке python, которую я скомпилировал. Мне интересно, есть ли способ связать мою программу с установленным системой python (я имею в виду установку python по умолчанию, которая поставляется с linux)Как связать статическую библиотеку python с моей программой на C++

ответ

14

Да. Существует утилита командной строки называется :

Usage: /usr/bin/python-config [--prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--help] 

Для целей подъёмника, вы должны вызвать его с --ldflags параметром. Она выведет список флагов, вы должны перейти к линкера (или g++) для того, чтобы связать с системой, установленной питона библиотеки:

$ python-config --ldflags 
-L/usr/lib/python2.6/config -lpthread -ldl -lutil -lm -lpython2.6 

Он также может дать вам флаги компиляции с --cflags параметра:

$ python-config --cflags 
-I/usr/include/python2.6 -I/usr/include/python2.6 -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes 

Допустим, вы тестовую программу в test.cpp файл, то вы можете сделать что-то подобное, чтобы компилировать и компоновать:

g++ $(python-config --cflags) -o test $(python-config --ldflags) ./test.cpp 

Это свяжет вашу программу с разделяемыми библиотеками. Если вы хотите статично, вы можете передать -static вариант компоновщика. Но это будет связано со всеми статическими вещами, включая среду выполнения. Если вы хотите пойти только со статическим python, вы должны сами найти эти библиотеки. Один из вариантов состоит в анализе вывода python-config --ldflags и поиске библиотек с расширениями .a. Но я предпочел бы придерживаться всех динамических или всех статических.

Надеюсь, это поможет. Удачи!

+1

Привет, Влад, Большое вам спасибо за ответ .. но, к сожалению, я не вижу никакого инструмента python-config в/usr/bin/Я на Fedora13. Как вы думаете, это может зависеть от платформы? – neuron

+1

У вас установлен RPM для разработки python? Думаю, это часть SDK. У меня это как на Ubuntu 10.4, так и на Fedora 12. У вас просто нет установленного пакета. – 2010-10-08 21:06:20

+1

эй .. Спасибо !! нашел его после установки python-devel из диспетчера пакетов с помощью 'sudo yum install python-devel' – neuron

Смежные вопросы