Boost Python не может создать расширение DLL

0

Я пытаюсь скомпилировать файлы учебников boost python. Что происходит, так это запуск bjam. Я получаю следующие файлы, созданные в каталоге bin/msvc-11.0/debug:

hello.obj, hello.obj.rsp, hello_ext.exp, hello_ext.lib, hello_ext.pdb, hello_ext.pyd, hello_ext.pdb.manifest, hello_ext.pyd.rsp.

Но никакая dll не создана. Если я запустил hello.py, я получаю:

Ошибка импорта: Ошибка загрузки DLL. Не удалось найти конкретный модуль.

Почему bjam не создает DLL?

  • 0
    bjam - ужасный выбор для системы сборки imo. Вы можете найти учебные пособия о том, как использовать, например, scons для создания расширенных расширений Python. Это то чем я занимаюсь. Это не отвечает на ваш вопрос, я знаю. Если вас интересует более подробная информация о том, как это сделать, дайте мне знать, и я добавлю кое-что, хотя в Интернете есть примеры.
  • 0
    Да, я уже нашел несколько статей, в которых упоминаются scons. Я проверю это. Но если бы вы могли привести здесь пример, как это можно сделать с этим, я буду признателен.
Теги:
dll
boost

1 ответ

0

Следующий файл является дословным из одного из моих проектов и должен дать вам представление. Обратите внимание, что он пытается найти версию Python по умолчанию для связи. Там могут быть лучшие способы сделать это. Не стесняйтесь задавать вопросы в комментариях, если что-то неясно. Модуль Boost Python, созданный с помощью этого SConstruct, называется genocpp. Вы должны иметь возможность построить его, если вы клонируете код проекта, предполагая, что используете Linux. С Windows это будет сложнее.

Вы также можете найти этот файл в Интернете по адресу https://bitbucket.org/faheem/snppy/src/tip/SConstruct?at=default как часть кода проекта SNPPy.

#!/usr/bin/python

import commands, glob, os

# Common file, for both executables and Python Interface
common_files = """geno print"""

def pyversion():
        pystr = commands.getoutput('python -V')
        version = pystr.split(' ')[1]
        major, minor = version.split('.')[:2]
        return major + '.' + minor

common_base = Split(common_files)
common = [f + ".cpp" for f in common_base]
common_obj = [f+".o" for f in common_base]

# For Python interface only
pif_conv = Split("cppvec_conv cppmap_conv cppset_conv cppunicode_conv")
pif_conv_files = [t+"_pif.cpp" for t in pif_conv]
pif = Split("geno")
pif_files = [t+"_pif.cpp" for t in pif]

# Boost Python Environment
boost_python_env = Environment(
    #CXX="g++-4.4",
    CPPPATH=["/usr/include/python"+pyversion(), "."],
    CXXFLAGS='-ftemplate-depth-100 -fPIC -Wall -Werror -pedantic -pipe -O3 -ffast-math -march=opteron',
    CPPDEFINES=['BOOST_PYTHON_DYNAMIC_LIB'],
    LIBPATH=["/usr/lib/python"+pyversion()+"/config"],
    LIBS=["python"+pyversion(), "m", "boost_python"],
    SHLIBPREFIX="", #gets rid of lib prefix
    SHOBJSUFFIX = ".bpo"
    )

test_env = Environment(
    #CXX="g++-4.4",
    CXXFLAGS='-Wall -Werror -pedantic -O0 -g',
    )

# Build boost python module
boost_python_env.SharedLibrary(target='genocpp', source = common + pif_conv_files + pif_files)
test_env.Program(target='geno_test', source = common + ["geno_test.cpp"])
  • 0
    Я посмотрю на это, хотя я нахожусь на окнах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню