[devel] /usr/lib64/python2.7/config/libpython2.7.a is WRONG

Vitaly Kuznetsov vitty на altlinux.ru
Пн Апр 16 09:01:21 MSK 2012


On Sun, 15 Apr 2012 20:13:37 +0400, Yuri N. Sedunov wrote:
> В Вск, 15/04/2012 в 20:07 +0400, Dmitry V. Levin пишет:
>> > > > Ошибка запаковки при переезде на статическую сборку python. По 
>> идее,
>> > > > там вместо неё должен лежать симлинк libpython2.7.so
>> > > > на ../../libpython2.7.so.
>> > > >
>> > > > 2 vitty@: вешать?
>> > >
>> > > Да, повесьте, пожалуйста, завтра исправлю.
>> >
>> > Зачем по-вашему нужен этот симлинк?
>>
>> Там и -L/usr/lib64/python2.7/config не нужен.  Но когда в
>> /usr/lib64/python2.7/config нет библиотек, от этого -L хотя бы вреда 
>> нет.
>>
>
> И здесь надо исправить.
> $ python-config --ldflags
> -L/usr/lib/python2.7/config -lpthread -ldl -lutil -lm -lpython2.7
> -Xlinker -export-dynamic

Не нравится -l или -L? Или обе? :)

Захакать, конечно, можно, но от этого могут сломаться те, кому 
действительно надо линковаться с libpython. В debian, чей подход к 
сборке python мы в том или ином виде пытаемся повторить сейчас сделано 
так:

в /usr/lib{,64}/python2.x/config/ лежат:
файлы пакета python-dev:
libpython2.x.a
libpython2.x-pic.a
файл пакета libpython:
libpython2.x.so -> ../../libpython2.x.so.1

python-config --ldflags:
-L/usr/lib/python2.x/config -lpthread -ldl -lutil -lm -lpython2.x

В python-config логика следующая:
         libs = getvar('LIBS').split() + getvar('SYSLIBS').split()
         libs.append('-lpython'+pyver)
         # add the prefix/lib/pythonX.Y/config dir, but only if there is 
no
         # shared library in prefix/lib/.
         if opt == '--ldflags':
             if not getvar('Py_ENABLE_SHARED'):
                 libs.insert(0, '-L' + getvar('LIBPL'))
             libs.extend(getvar('LINKFORSHARED').split())
         print ' '.join(libs)

т.е. -lpython2.x добавляется всегда, -L/usr/lib{,64}/python2.x/config 
добавляется в случае статической линковки интерпретатора с libpython. У 
нас, насколько я понимаю, пользователей статической libpython2.x.a нет, 
не стоит их и заводить. Стоит, на мой взгляд, красоты ради отучить 
python-config выводить -L/usr/lib{,64}/python2.x/config, -lpython2.x же 
лучше оставить. Или я не прав?


Подробная информация о списке рассылки Devel