У меня нет формального обучения VS, и я обычно использую его для программирования простых инструментов для своего исследования.(Я преподаватель).
В настоящее время я работаю над библиотекой C ++ для Python, используя SWIG, поэтому я выполнил шаги, предложенные в Как создать DLL с SWIG из Visual Studio 2010?
Шаг №.25 говорит: « Вы не можете собрать отладочную версию, если не создадите отладочную версию самого Python », но я подумал, что можно создать отладочную версию C ++, написав main
который использует библиотеку самого C ++, не касаясь Python или вообще не включая Python .( Пожалуйста, дайте мне знать, если я ошибаюсь .)
Некоторое время назад я пытался создать два проекта в одном решении (один для библиотеки, один для приложения для тестирования), но яне совсем убедился в результате, поэтому я подумал, что пришло время попробовать конфигурации.Я изменил конфигурацию Debug для своего проекта SWIG, следуя предложениям в Повторное определение точки входа C / C ++ в Microsoft Visual Studio 2015 и комментариям (изменили тип конфигурации, расширение и точку входа и добавили дополнительные зависимости vcruntimed.lib
и ucrtd.lib
, также исключены из сборки .i
и _wrap.cxx
.
Проект компилируется и запускается, но методы / функции в стандартной библиотеке <random>
C ++ возвращают неслучайные числа. Обновление / уточнение: В следующем коде
std::normal_distribution<double> rand::distn(0, 1);
std::uniform_real_distribution<double> rand::distu(0, 1);
std::mt19937_64 rand::generator;
void rand::init() {
generator.seed((unsigned long)time(NULL));
}
double rand::u01()
{
return distu(generator);
}
функция u01()
всегда возвращает 0.0
, тогда как при вызове ее из Python она работает как положено.
Я проверил код и генератор засевается правильно.Кроме того, библиотека все еще работает нормально из Python, поэтому я склонен думать, что это не кодирование, а проблема конфигурации.
Я знаю, что этот вопрос был бы лучше, если бы я опубликовал минимальный рабочий пример, но перед инвестированиемвремя (которого, я думаю, у меня нет) Я бродил, если я упускаю что-то очевидное, что более осведомленный пользователь VS мог бы легко заметить .Пожалуйста, не поймите меня неправильно, если я ошибаюсь и ответ не так очевиден, я действительно постараюсь найти время.
Заранее спасибо.