4

Когда программе unix/linux требуется "материал", я обычно помещаю (или dpkg помещает для меня) библиотеки и заголовки в /usr /lib и /usr /include, соответственно.

Я недавно загрузил библиотеку, которую хочу использовать в Windows, после того, как недавно сделал это на моей машине с Linux, которая предоставляет загрузку для готового бинарного файла Windows. Конечно, это идет с .dll, .lib и .h файлом, который принадлежит библиотеке.

У меня вопрос, есть ли какая-либо парадигма или шаблон относительно того, куда я могу поместить эти файлы, чтобы я мог использовать их из нескольких различных программ / исходных файлов? README, поставляемый с библиотекой, не упомянул об этом, так что простите мое невежество, исходящее от Unix. Кроме того, я использую командную строку / gcc toolchain, а не VC.

3 ответа3

2

Обычно единственными общими библиотеками являются библиотеки для Visual Studio, .NET Frameworks, DirectX и Windows API. Другие библиотеки обычно устанавливаются в каждый каталог приложения. Как правило, если библиотека должна быть установлена для совместного использования, она будет делать одно из двух:

  1. Установите в свое собственное место в папке Program Files или Program Files\Common Files.
  2. Установите в \Windows \System32 или (очень редко) \Windows. Это возврат к тому, как Windows работала около 10 лет назад, и считается плохой практикой (если не администраторы программисты).

В конечном счете, однако, не имеет значения, куда вы поместите их в файловой системе, если пользователи имеют доступ к ним для чтения. Правильные динамические библиотеки регистрируются (большинство отвечают на regsvr32 <dllname> и regsvr32 /u <dllname>), поэтому приложения, которым они нужны, будут запрашивать в реестре Windows нужную библиотеку (на основе GUID или имени класса), и реестр знает, где файл есть. Реестр здесь выступает в качестве глобального каталога для установленных библиотек.

ОБНОВИТЬ:
Для справки, вот как Windows ищет библиотеки, указанные вами по имени библиотеки.

Если вы укажете нужный вам класс, есть несколько способов сделать это. Например, вы можете использовать CoGetClassObject, если вы знаете CLSID, который вы можете получить, используя что-то вроде CLSIDFromProgID.

2

Мои личные предпочтения - сделать одно из следующего:

  1. Создайте папку в \Program Files \ и поместите их туда. Если вам нужно, вы можете добавить папку в PATH, но если вам нужно зарегистрировать .dll с помощью regsvr32 вам, вероятно, не нужно будет добавлять ее в PATH.
  2. Сделайте так же, как # 1, за исключением того, что создайте его в папке где-то еще

Вы также можете поместить его в% SYSTEMROOT%, но я предпочитаю не использовать элементы, отличные от Windows.

0

Если вы поместите их в c:\windows\system32, они должны быть доступны любой программе (но в основном приглашению cmd).

Вы также можете создать собственную папку для них в любом месте и добавить папку в переменную "Путь" Windows в дополнительных системных настройках. Это будет иметь тот же эффект.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .