Добавление Повышения заставляет Отладочную сборку зависеть от “non-D” времени выполнения MSVC DLLs

json хорош для сериализации списков / диктов / чисел / строк:

import json 

My_list = [['Hello', 'World', 0], ['Pretty', 'World', 1], ['Tired', 'World', 2]]

#write to file
with open("data.json", "w") as file:
    json.dump(My_list, file)

#read from file
with open("data.json") as file:
    new_list = json.load(file)

print(new_list)

Результат:

[['Hello', 'World', 0], ['Pretty', 'World', 1], ['Tired', 'World', 2]]
5
задан Reunanen 22 October 2008 в 19:26
поделиться

6 ответов

Повышение. Поток имеет довольно много возможных комбинаций сборки, чтобы попытаться обслужить все различия в соединении сценариев, возможных с MSVC. Во-первых, можно или связаться статически для Повышения. Поток или ссылка на Повышение. Поток в отдельном DLL. Можно затем связаться с версией DLL времени выполнения MSVC или статического времени выполнения библиотеки. Наконец, можно связаться со временем выполнения отладки или временем выполнения выпуска.

Повышение. Заголовки потока пытаются автоматически обнаружить сценарий сборки с помощью предопределенных макросов, которые генерирует компилятор. Для соединения против версии, которая использует время выполнения отладки, Вы должны иметь _DEBUG определенный. Это автоматически определяется / MD и/MDd переключателями компилятора, таким образом, он должен быть в порядке, но Ваше описание проблемы предлагает иначе.

Где Вы получали предварительно созданные двоичные файлы от? Вы явно выбираете библиотеку в своих настройках проекта, или Вы позволяете механизму автоссылки выбрать соответствующий .lib файл?

2
ответ дан 14 December 2019 в 19:30
поделиться

Я полагаю, что у меня была эта та же проблема с Повышением прошлого. От моего понимания это происходит, потому что заголовки Повышения используют инструкцию по препроцессору связаться против надлежащего lib. Если Ваши библиотеки отладки и выпуска будут в той же папке и будут иметь различные имена, то функция "автоссылки" не будет работать правильно.

То, что я сделал, определяют BOOST_ALL_NO_LIB для моего проекта (который предотвращает заголовки от "автоматического соединения"), и затем используйте настройки проекта VC для соединения против корректных библиотек.

1
ответ дан 14 December 2019 в 19:30
поделиться

Это - классическая ошибка ссылки. Похоже на соединение с Повышением DLL, который самого связывается с неправильным временем выполнения C++ (существует также эта страница, сделайте текстовый поиск "потоков"). Это также похоже boost::posix::time библиотека связывается с корректным DLL.

К сожалению, я не нахожу страницу, которая обсуждает, как выбрать правильно созданное Повышение DLL (хотя я действительно находил трехлетнее электронное письмо, которое, кажется, указывает на BOOST_THREAD_USE_DLL и BOOST_THREAD_USE_LIB).


Смотря на Ваш ответ снова, кажется, что Вы используете предварительно созданные двоичные файлы. DLL, с которым Вы не можете связаться, является частью пакета функций TR1 (второй вопрос на той странице). Тот пакет функций доступен на веб-сайте Microsoft. Или Вам будет нужен другой двоичный файл для соединения против. По-видимому, boost::posix::time библиотека связывается против неисправленного времени выполнения C++.

Так как Вы уже применили пакет функций, я думаю следующий шаг, который я сделал бы, должен будет создать Повышение вручную. Это - путь, который я всегда брал, и это очень просто: загрузите двоичный файл BJam и запустите скрипт Сборки Повышения в источнике библиотеки.Именно.

1
ответ дан 14 December 2019 в 19:30
поделиться

Теперь это стало еще немного более интересным... Если я просто добавляю это где-нибудь в источнике:

boost::posix_time::ptime pt = boost::posix_time::microsec_clock::universal_time();

(вместе с соответствием #include материал), затем это снова работает хорошо. Таким образом, это - одно быстрое и даже слишком грязное решение, но эй — что продолжается здесь, действительно?

0
ответ дан 14 December 2019 в 19:30
поделиться

Похож на других людей, ответила сторона Повышения проблемы. Вот немного вводной информации на стороне MSVC вещей, которые могут сохранить дальнейшую головную боль.

Существует 4 версии C (и C++) возможное время выполнения:

  • /MT: libcmt.lib (C), libcpmt.lib (C++)
  • /MTd: libcmtd.lib, libcpmtd.lib
  • /MD: msvcrt.lib, msvcprt.lib
  • /MDd: msvcrtd.lib, msvcprtd.lib

Версии DLL все еще требуют соединения с тем статическим lib (который так или иначе делает всю установку для соединения с DLL во времени выполнения - я не знаю детали). Уведомление во всей отладочной версии случаев имеет d суффикс. Время выполнения C использует c инфикс и время выполнения C++ используют cp инфикс. Видеть шаблон? В любом приложении необходимо только когда-либо связываться с библиотеками в одной из тех строк.

Иногда (как в Вашем случае), Вы связываетесь с чужой статической библиотекой, которая настроена для использования неверной версии C или времени выполнения C++ (через ужасно раздражающий #pragma comment(lib)). Можно обнаружить это путем поднимания многословия компоновщика путь, но это - реальный ЛАВАШ для поиска для. "Уничтожают грызуна с симметрирующим устройством" решение, должен использовать /nodefaultlib:... компоновщику, устанавливающему для исключения 6 C и библиотеки C++, что Вы знаете Вас, не нужно. Я использовал это в прошлом без проблемы, но я не положителен, что это будет всегда работать..., возможно, кто-то выйдет из работы по дереву, говоря мне, как это "решение" может заставить Вашу программу есть младенцев по вторникам днем.

1
ответ дан 14 December 2019 в 19:30
поделиться

Из памяти различным частям библиотек повышения нужны Вы для определения некоторых флагов препроцессора, чтобы смочь скомпилировать правильно. Материал как BOOST_THREAD_USE_DLL и так далее.

BOOST_THREAD_USE_DLL не будет тем, что вызывает эту конкретную ошибку, но она может ожидать, что Вы определите _DEBUG или что-то как этот. Я помню несколько лет назад в нашем повышении проекты C++, у нас были довольно многие дополнительные BOOST_XYZ определения препроцессора объявляются в параметрах компилятора Visual Studio (или make-файл)

Проверьте config.hpp файл в повышении распараллеливает каталог. Когда Вы сдерживаетесь ptime материал это возможно включает другое config.hpp файл, который может затем определить те вещи препроцессора по-другому.

0
ответ дан 14 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: