Важность компиляции однопоточных v. Многопоточных (и соглашения об именах lib)? - PullRequest
0 голосов
/ 11 июня 2011

[EDIT] ==> Для пояснения: в тех средах, где несколько целей развернуты в одном каталоге, Planet Earth приняла решение о добавлении «d» или «_d» или «_debug» к версии «DEBUG». (из библиотеки или исполняемого файла). Такое соглашение можно считать «вездесущим» и «понятым», хотя (конечно) не каждый делает это.

ПОНИМАТЕЛЬНО, чтобы разрешить неоднозначность между «разделяемой» и «статической» версиями библиотеки, общепринятым условием является добавление чего-либо для различия между static-and-shared (например, «myfile.lib» для shared-import-lib). -on-Windows и "myfile_s.lib" для статического импорта-lib-on-Windows). Хотя Posix не имеет этой неоднозначности, основанной на расширении файла, помните, что расширение файла не используется в «строке ссылки», поэтому также полезно иметь возможность явно указывать «статическую» или «общую» версию библиотеки .

Для целей этого вопроса и "debug/release", и "static/shared" повышены до "повсеместного соглашения для украшения корня имени файла" .

ВОПРОС: Получается ли какая-либо другая конфигурация развертывания "повышена" до этого уровня "вездесущего соглашения", чтобы она стала явной в имени целевого корневого файла?

Мое текущее предположение "нет". Чтобы ответ был «Да», потребовалось бы: «Использовать» более одной конфигурации для данной цели (и, следовательно, развернуть ее в общем каталоге, который является предполагаемой основой для вопроса).

Раньше мы компилировали с возможностью «и без веб-плагина» и без нее, для которой аналогично требовалось оформление имени, но мы больше не строили эти цели (поэтому я не буду утверждать это в качестве примера). Точно так же мы иногда компилируем с поддержкой и без поддержки многобайтовых символов, но я ненавижу это, поэтому я не буду утверждать это тоже.

[ОРИГИНАЛЬНЫЙ ВОПРОС]

Мы устанавливаем соглашения об именах библиотек / policy, для применения на разных языках и платформах (например, мы поддерживаем гибридные продукты, использующие несколько языков на разных платформах, включая C / C ++ , C #, Java). Особой целью является обеспечение того, чтобы мы обрабатывали цели / ресурсы для мобильной разработки (что является для нас новым) в дополнение к нашим традиционным настольным (и встроенным) приложениям.

Конечно, опция one должна иметь разные пути для целей из разных конфигураций сборки. Для целей этого вопроса принято решение о размещении всех целей в одном каталоге и «украшении» имени библиотеки / ресурса / исполняемого файла, чтобы избежать коллизий на основе конфигурации сборки (например, «DEBUG» v. "RELEASE", "static lib" v. "Shared / DLL" и т. Д.)

Текущее решение аналогично другим в сети, где мы добавляем токены, чтобы избежать коллизий имен:

  MyName.lib           (release build, import for shared/dll)
  MyName_s.lib         (release build, static lib)

  MyName_d.lib         (debug build, import for shared/DLL)
  MyName_ud.lib        (Unicode/wide-char, debug, import for shared/DLL)
  MyName_usd.lib       (Unicode/wide-char, static lib, debug)

(Выше приведены примеры Windows, но эти политики также применимы к нашим системам POSIX.)

Они основаны на:

  d     (release or debug)
  u     (ASCII or Unicode/wide-char)
  s     (shared/DLL or static-lib)

ВОПРОС: У нас нет устаревших приложений, которые должны быть скомпилированы однопоточными, и я понимаю, что (в отличие от Microsoft) системы POSIX могут связывать однопоточные и многопоточные цели в одно приложение без вопрос. Учитывая сегодняшнее стремление к многоядерности и многопоточности, Есть ли необходимость в крупном предприятии , чтобы установить следующее для идентификации скомпилированных целей «одно-» против «многопоточных»?

  t       (single-threaded or multi-threaded)  *(??needed??)*

... и мы пропустили любое другое столкновение с целью, например, компиляцию с STL и без него (на C ++)?

Кроме того, у Microsoft есть соглашения об именах библиотек по адресу: http://msdn.microsoft.com/en-us/library/aa270400(v=vs.60).aspx и их соглашения об именах DLL по адресу: http://msdn.microsoft.com/en-us/library/aa270964(v=vs.60).aspx

Подобный вопрос о SO год назад, в котором не говорилось о многопоточности и не ссылались на соглашения Microsoft, можно найти по адресу: Что такое правильное соглашение об именах для библиотек MSVC, статических библиотек и библиотек импорта

1 Ответ

2 голосов
/ 11 июня 2011

Вы используете древний компилятор. Нет необходимости устанавливать такой стандарт на предприятии, поставщик уже сделал это. Microsoft не поставляла однопоточную версию CRT в течение последних 13 лет. Аналогичным образом, Windows была операционной системой Unicode в течение последних 17 лет. В наши дни не имеет смысла писать код Unicode.

Но да, общепринятым условием является добавление "d" для отладочной сборки библиотеки. И дать DLL-версию библиотеки совершенно другое имя.

...