Почему библиотека времени выполнения является параметром компилятора, а не опцией компоновщика?

Попробуйте:

import re
df['tags'][1] = re.split(',', str(df['tags'][1]).replace('[','').replace(']', ''))

Вывод:

id  tags
1   ['band_music', 'fun', 'tv', 'movies']
12
задан mch 6 February 2009 в 10:07
поделиться

5 ответов

Один побочный эффект определений препроцессора C как _DLL и _DEBUG это zdan упомянуло:

Некоторые структуры данных (такие как контейнеры STL и итераторы) могут быть измерены по-другому во времени выполнения отладки, возможно из-за функций такой как _HAS_ITERATOR_DEBUGGING и _SECURE_SCL. Необходимо скомпилировать код с определениями структуры, которые совместимы с двоичным файлом с библиотекой, с которой Вы связываетесь.

Если Вы объектные файлы смешивания и подгонки, которые были скомпилированы против различных библиотек времени выполнения, Вы получите предупреждения компоновщика, такие как следующее:

warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs
7
ответ дан 26 October 2019 в 10:47
поделиться

Компилятор должен знать, генерируете ли Вы единственный потоковый или многопоточный код. По умолчанию компилятор генерирует ориентированный на многопотоковое исполнение (многопоточный) код. Необходимо сказать это, если Вы хотите единственный код потока. При изменении значения по умолчанию, компилятор изменяет библиотеку времени выполнения по умолчанию (можно всегда переопределять это в опциях команды компоновщика, просто уверены, что библиотека, которую Вы выбираете, имеет ту же структуру кода как Ваши объектные файлы: однопоточный статический, многопоточный статический или многопоточный DLL). Обратите внимание, что нет никакой однопоточной опции DLL (по определению библиотека времени выполнения, DLL будет создан столь ориентированный на многопотоковое исполнение, как это совместно используется несколькими приложениями).

3
ответ дан 26 October 2019 в 10:47
поделиться

При игнорировании статического времени выполнения затем, Вы получаете те же опции как Linux.

Я знаю, что статическое время выполнения может быть usful, но мне на самом деле никогда не был нужен он. Также это приводит к потенциальным проблемам, имеющим дело с выделением/освобождением памяти, и в результате я нахожу это легче к только для использования времени выполнения DLL.

Наличие Выпуска/Отладочной версии совпадает с Linux/Unix все же.
Хотя для эффективности I причин я alos создают единственный поток и много версии потока библиотек.

1
ответ дан 26 October 2019 в 10:47
поделиться

Эти опции могут добавить, определяет (__ DLL и __ ОТЛАДКА, например), которые используются в заголовочных файлах библиотеки времени выполнения. Одна общая вещь сделать состоит в том, чтобы добавить __ declspec (dllimport) к объявлениям функции при динамическом соединении.

Компилятор также, кажется, использует их для помощи компоновщику в соединении с корректными библиотеками. Это объяснено в MSDN.

8
ответ дан 26 October 2019 в 10:47
поделиться

Я полагаю, что причина позади этого состоит в том, что SEH (структурированный обработчик исключений) код будет сгенерирован по-другому, в зависимости от которой библиотеки времени выполнения Вы связываетесь против.

0
ответ дан 26 October 2019 в 10:47
поделиться
Другие вопросы по тегам:

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