Любой трюк, чтобы встроить CPython в общие библиотеки? - PullRequest
0 голосов
/ 11 июля 2020

Мое приложение должно вызывать функции CPython, поэтому мне нужно создать версию Python с общей библиотекой, а затем связать ее.

Я использую Python 3.7, вот команды для его создания:

CFLAGS="-O0 -g3" ./configure --prefix=${PY_INSTALL} --with-pydebug --enable-shared;
make;
make install

Вы можете видеть, что я добавил параметр «--enable-shared».

После вышеуказанных команд я вижу общую библиотеку:

$>ls dbg_install/lib/
libpython3.7dm.a*  libpython3.7dm.so@  libpython3.7dm.so.1.0*  pkgconfig/  python3.7/

Вот мой тестовый код:

$>cat foo.c
#include "Python.h"


int
make_TclObj_from_PyObj(PyObject *py_obj)
{
    if (PyBytes_CheckExact(py_obj)) {
        return 1;
    } else {
        assert(0  && "Do not support yet");
    }

    return 0;
}

Вот команда для его создания:

gcc -shared -o libfoo.so  -I ./dbg_install/include/python3.7dm   foo.c   -L./dbg_install/lib  -lpython3.7dm

Но я получаю следующую ошибку:

/usr/bin/ld: /tmp/cc7Oip8k.o: relocation R_X86_64_PC32 against symbol `PyBytes_Type' can not be used when making a shared object; recompile with -fPIC

Поиск в Google сообщает, что указанная выше ошибка связана с тем, что библиотека не построена с использованием разделяемой библиотеки.

Я даже экспериментировал с переименованием lib python3 .7dm.a в lib python3 .7dm.a.ori в чтобы убедиться, что это .so был связан. Но ошибка сохраняется.

Вы видите, что мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...