Onde colocar bibliotecas e cabeçalhos nas janelas (vindas do unix?)

4

Quando um programa unix / linux requer "coisas", eu costumo colocar (ou dpkg puts para mim) bibliotecas e cabeçalhos em / usr / lib e / usr / include, respectivamente.

Eu recentemente baixei uma biblioteca que eu gostaria de usar no windows, depois de recentemente fazer isso na minha máquina linux, que fornece um download para um binário pré-construído do windows. Claro, isso vem com um arquivo .dll, .lib e .h que pertence à biblioteca.

A minha pergunta é, existe algum paradigma ou padrão de onde eu posso colocar esses arquivos para que eu possa fazer uso deles de vários programas / arquivos fonte diferentes? O README fornecido com a biblioteca não fez menção a isso, então perdoe minha ignorância vinda do unix. Além disso, estou usando a linha de comando / gcc toolchain, não VC.

    
por cemulate 16.06.2011 / 05:29

3 respostas

2

Normalmente, as únicas bibliotecas compartilhadas são as do Visual Studio, do .NET Frameworks, do DirectX e da API do Windows. Outras bibliotecas geralmente são instaladas em cada diretório de aplicativos. Geralmente, se uma biblioteca precisar ser instalada para uso compartilhado, ela fará uma das duas coisas:

  1. Instale em seu próprio local em Arquivos de programas ou Arquivos de programas \ Arquivos comuns.
  2. Instale em \ Windows \ System32 ou (muito raramente) \ Windows. Este é um retrocesso à forma como o Windows funcionou, cerca de 10 anos atrás, e é considerado uma má prática (se não pelos programadores pelos administradores).

Em última análise, no entanto, não importa onde, no sistema de arquivos, você os coloca, desde que os usuários tenham acesso de leitura a eles. Bibliotecas dinâmicas apropriadas são registradas (a maioria responde a regsvr32 <dllname> e regsvr32 /u <dllname> ), portanto, os aplicativos que precisam delas solicitarão ao Registro do Windows a biblioteca desejada (com base no GUID ou nome de classe) e o registro saberá onde está o arquivo. O registro aqui está agindo como um catálogo global para bibliotecas instaladas.

UPDATE:
Para referência, aqui é como o Windows pesquisa as bibliotecas especificadas pelo nome da biblioteca.

Se você especificar a classe de que precisa, existem várias maneiras de fazer isso. Por exemplo, você pode usar CoGetClassObject se conhecer o CLSID, que você pode usar com algo como CLSIDFromProgID .

    
por 16.06.2011 / 05:49
2

As minhas preferências pessoais são as seguintes:

  1. Crie uma pasta em \ Arquivos de programas \ e coloque-os lá. Se você precisar, poderá adicionar a pasta ao PATH, mas se precisar registrar o arquivo .dll usando regsvr32 , provavelmente não precisará adicioná-lo ao PATH.
  2. Faça o mesmo que # 1, exceto criá-lo em uma pasta em outro lugar

Você também pode colocá-lo em% SYSTEMROOT%, mas eu prefiro não deixar itens do Windows fora disso.

    
por 16.06.2011 / 05:49
0

Se você soltá-los em c: \ windows \ system32, eles devem ser acessíveis por qualquer programa (mas principalmente pelo prompt do cmd).

Você também pode criar sua própria pasta para eles em qualquer lugar e adicionar a pasta à variável "Caminho" do Windows nas configurações avançadas do sistema. Isso terá o mesmo efeito.

    
por 16.06.2011 / 05:49