Visual Studio 8 и библиотека Boost.Python странные ссылки - PullRequest
0 голосов
/ 06 апреля 2011

Я новичок в VS 8 и C ++ в Windows в целом.У меня странная проблема, когда я пытаюсь скомпилировать расширение Python в VC 8 в двух разных проектах (один был очень простой фиктивный тестовый проект, а другой - довольно большой проект, в который я хочу добавить расширения).

Я предоставляю одинаковые каталоги include / library, необходимые для Boost.Python для обоих проектов.Они следующие:

Включение каталогов:

  • C: \ boost-python \ boost_1_46_1
  • C: \ Python27 \ include

Библиотеки каталогов:

  • C: \ boost-python \ boost_1_46_1 \ stage \ lib
  • C: \ Python27 \ libs

Пустой проекткомпилируется и работает без проблем, в другом проекте, похоже, отсутствует определенная библиотека.VS 8 выдает следующее сообщение об ошибке:

Error   3   fatal error LNK1104: cannot open file 'libboost_python-vc80-mt-gdp-1_46_1.lib'  

'libboost_python-vc80-mt-gdp-1_46_1.lib' не был создан при сборке библиотек наддува.

Я помню, как фиктивный проект жаловался на отсутствие libboost_python-vc80-mt-gd-1_46_1.lib, когда я не включил C: \ boost-python \ boost_1_46_1 \ stage \ lib '.Но после того, как я предоставил этот каталог библиотеки, он скомпилирован без проблем.'libboost_python-vc80-mt-gd-1_46_1.lib' существует в этом каталоге.

Так что я запутался, почему мой другой проект ищет gdp вместо gd, как мой фиктивный проект.Часть кода, специфичная для python, одинакова в обоих проектах.

Это был фиктивный код, который я тестировал:

#include <boost/python.hpp>
#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>

using namespace boost::python;

boost::mt19937 gen;

struct World
{
    std::string msg;
    double mypi;

    World(std::string msg): msg(msg) {
        gen.seed(std::time(0));
    } // added constructor
    void set(std::string msg) { this->msg = msg; }
    std::string greet() { return msg; }
    double get() const { return mypi; }
    void setter(double mypi) { this->mypi = mypi; }

    double getgaussrand() {
        boost::normal_distribution<> nd(0.0, 1.0);
        boost::variate_generator<boost::mt19937&, boost::normal_distribution<> > var_nor(gen, nd);
        return var_nor();
    }

};

BOOST_PYTHON_MODULE(test_vs_proj_dll)
{
    class_<World>("World", init<std::string>())
        .def("greet", &World::greet)
        .def("set", &World::set)
        .def("getgaussrand", &World::getgaussrand)
        .def_readonly("msg",  &World::msg)
        .def_readwrite("mypi", &World::mypi)
        .add_property("rovalue", &World::get)
        .add_property("value", &World::get, &World::setter)
    ;
}

1 Ответ

0 голосов
/ 14 марта 2013

Судя по названию библиотеки буста, которое она выбрала для себя, звучит так, будто ваш большой проект строится с другими аргументами, используя библиотеку STLPort, а не исходную библиотеку вашего компилятора, а ваш фиктивный проект - нет.

-gdp
  • g - использование отладочных версий стандартных библиотек и библиотек поддержки времени выполнения.
  • d - сборка отладочной версии вашего кода.
  • p - использование стандартной библиотеки STLPort вместо библиотеки по умолчанию, поставляемой с вашим компилятором.

В разделе Имена библиотек руководства по началу работы в Windows Boost содержится дополнительная информация.

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