Важность составления однопоточных против многопоточных (и соглашений об именах LIB)?

StackOverflow https://stackoverflow.com/questions/6316388

Вопрос

Править] ==>Чтобы уточнить, в тех средах, где несколько целей развернуты в одном и том же каталоге, планета Земля решила соглашение о добавлении »d" или же "_d" или же "_debug"к"DEBUG«Версия (библиотеки или исполняемый файл). Такое соглашение можно считать« повсеместным »и« понятым », хотя (конечно) не все делают это.

Точно так же, чтобы разрешить двусмысленность между «общими» и «статическими» версиями библиотеки, общая конвенция состоит в том, чтобы добавить что-то, чтобы различать статическое и общеживающее (например, »myfile.lib"Для общего импорта-либ-на-ветра и"myfile_s.lib«Для статического-импорта-либ-на-окнах). Хотя POSIX не имеет этой неоднозначности на основе расширения файла, помните, что расширение файла не используется в« Строке ссылок », поэтому так же полезно иметь возможность явно Укажите «статическую» или «общую» версию библиотеки.

Для этого вопроса оба "debug/release" а также "static/shared"Продвигаются "Вездесущее соглашение о украшении имени файла root".

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

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

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

Оригинальный вопрос

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

Конечно, один Вариант состоит в том, чтобы иметь разные пути для целей из различных конфигураций сборки. Для целей этого вопроса принято решение о том, чтобы все цели совместно с использованием одного каталога и «украсить» имя библиотеки/ресурса/исполняемого файла, чтобы избежать столкновений на основе конфигурации сборки (например, «отладка» V. «Выпуск», «Статический Либ» против. «Общий/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

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

Это было полезно?

Решение

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

Но да, общая конвенция состоит в том, чтобы добавить «D» для сборки библиотеки отладки. И дать DLL версию библиотеки совершенно другое имя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top