{"id":16163,"date":"2024-08-12T11:45:52","date_gmt":"2024-08-12T14:45:52","guid":{"rendered":"https:\/\/categoriaoutros.com.br\/?p=16163"},"modified":"2024-08-13T15:02:09","modified_gmt":"2024-08-13T18:02:09","slug":"linux-lpi-102-3-controle-de-bibliotecas-compartilhadas","status":"publish","type":"post","link":"https:\/\/categoriaoutros.com.br\/?p=16163","title":{"rendered":"Linux LPI 102.3: Controle de bibliotecas compartilhadas"},"content":{"rendered":"\n<p>Bibliotecas compartilhadas (ou objetos compartilhados) s\u00e3o arquivos que cont\u00eam c\u00f3digo que pode ser usado por m\u00faltiplos programas ao mesmo tempo. No Linux, essas bibliotecas geralmente t\u00eam a extens\u00e3o <strong>.so <\/strong>(shared object). Elas s\u00e3o carregadas na mem\u00f3ria apenas uma vez, e diferentes programas podem acessar esse c\u00f3digo compartilhado para executar fun\u00e7\u00f5es comuns, como manipula\u00e7\u00e3o de arquivos ou interface gr\u00e1fica.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>Bibliotecas compartilhadas (ou objetos compartilhados) s\u00e3o trechos de c\u00f3digo compilado e reutiliz\u00e1vel, como fun\u00e7\u00f5es ou classes, usados de<br>forma recorrente por diversos programas.<\/p><\/blockquote><\/figure>\n\n\n\n<p>comandos e arquivos relacionados \u00e0 configura\u00e7\u00e3o e gest\u00e3o de bibliotecas em sistemas Linux:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Termo<\/th><th>Descri\u00e7\u00e3o<\/th><th>Exemplo de Uso<\/th><\/tr><\/thead><tbody><tr><td><strong><code>ldd<\/code><\/strong><\/td><td>Comando que exibe as depend\u00eancias de bibliotecas compartilhadas de um execut\u00e1vel ou script.<\/td><td><code>ldd \/bin\/ls<\/code><br>Exibe as bibliotecas necess\u00e1rias para o comando <code>ls<\/code>.<\/td><\/tr><tr><td><strong><code>ldconfig<\/code><\/strong><\/td><td>Comando usado para atualizar o cache de bibliotecas compartilhadas do sistema e criar links simb\u00f3licos adequados. Ele \u00e9 normalmente executado ap\u00f3s a instala\u00e7\u00e3o de novas bibliotecas.<\/td><td><code>sudo ldconfig<\/code><br>Atualiza a cache e os links simb\u00f3licos de bibliotecas compartilhadas.<\/td><\/tr><tr><td><strong><code>\/etc\/ld.so.conf<\/code><\/strong><\/td><td>Arquivo de configura\u00e7\u00e3o que lista os diret\u00f3rios adicionais onde o sistema deve procurar por bibliotecas compartilhadas. Direciona o <code>ldconfig<\/code> a incluir esses diret\u00f3rios na cache.<\/td><td>&#8211; Adicionar <code>\/opt\/myapp\/lib<\/code> ao <code>\/etc\/ld.so.conf<\/code> para incluir o diret\u00f3rio na busca de bibliotecas.<\/td><\/tr><tr><td><strong><code>LD_LIBRARY_PATH<\/code><\/strong><\/td><td>Vari\u00e1vel de ambiente que especifica diret\u00f3rios adicionais onde o sistema deve procurar por bibliotecas compartilhadas, antes de procurar nos diret\u00f3rios padr\u00e3o.<\/td><td><code>export LD_LIBRARY_PATH=\/opt\/myapp\/lib:$LD_LIBRARY_PATH<\/code><br>Define um caminho adicional de bibliotecas para o sistema durante a sess\u00e3o atual.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>comandos que usaremos nesse post:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ls<\/strong>: Lista o conte\u00fado do diret\u00f3rio.<\/li>\n\n\n\n<li><strong>cat<\/strong>: Concatena arquivos e exibe na sa\u00edda padr\u00e3o.<\/li>\n\n\n\n<li><strong>sudo<\/strong>: Permite que o superusu\u00e1rio execute o comando com privil\u00e9gios administrativos.<\/li>\n\n\n\n<li><strong>ldconfig<\/strong>: Configura as liga\u00e7\u00f5es de tempo de execu\u00e7\u00e3o do vinculador din\u00e2mico.<\/li>\n\n\n\n<li><strong>echo<\/strong>: Exibe o valor de uma vari\u00e1vel ou texto na sa\u00edda padr\u00e3o.<\/li>\n\n\n\n<li><strong>export<\/strong>: Exporta o valor de uma vari\u00e1vel de ambiente para shells secund\u00e1rios.<\/li>\n\n\n\n<li><strong>unset<\/strong>: Remove uma vari\u00e1vel de ambiente.<\/li>\n\n\n\n<li><strong>ldd<\/strong>: Exibe as depend\u00eancias de objetos compartilhados de um programa.<\/li>\n\n\n\n<li><strong>readelf<\/strong>: Exibe informa\u00e7\u00f5es sobre arquivos ELF (Executable and Linkable Format).<\/li>\n\n\n\n<li><strong>objdump<\/strong>: Exibe informa\u00e7\u00f5es detalhadas sobre arquivos de objetos, como c\u00f3digo de m\u00e1quina e tabelas de s\u00edmbolos.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Programas e bibliotecas compartilhadas<\/h2>\n\n\n\n<p>Para entender melhor sobre bibliotecas, precisamos considerar o processo de cria\u00e7\u00e3o de programas. Um programa \u00e9 desenvolvido usando uma linguagem de programa\u00e7\u00e3o como C, C++, entre outras.<\/p>\n\n\n\n<p>Ap\u00f3s a cria\u00e7\u00e3o, o c\u00f3digo-fonte precisa ser transformado em um execut\u00e1vel utiliz\u00e1vel. O primeiro passo \u00e9 a compila\u00e7\u00e3o, onde o compilador converte o c\u00f3digo-fonte em c\u00f3digo de m\u00e1quina, resultando em arquivos-objeto.<\/p>\n\n\n\n<p>Em seguida, o vinculador (linker) combina os arquivos-objeto e os vincula \u00e0s bibliotecas necess\u00e1rias para gerar o arquivo execut\u00e1vel final.<\/p>\n\n\n\n<p>Esse v\u00ednculo com bibliotecas \u00e9 essencial porque, na maioria dos casos, os programas dependem de bibliotecas para fornecer funcionalidades adicionais e reutilizar c\u00f3digo.<\/p>\n\n\n\n<p>Uma biblioteca \u00e9 um conjunto de c\u00f3digos e fun\u00e7\u00f5es pr\u00e9-escritas, existentes no sistema, que podem ser reutilizadas por programas criados por voc\u00ea. Uma biblioteca ajuda a economizar tempo e recursos, evitando que os desenvolvedores precisem reescrever c\u00f3digo comum para tarefas frequentes, como manipula\u00e7\u00e3o de arquivos ou opera\u00e7\u00f5es matem\u00e1ticas.<\/p>\n\n\n\n<p>A liga\u00e7\u00e3o entre as bibliotecas e os programas pode ser feita de maneira <strong>est\u00e1tica<\/strong> ou <strong>din\u00e2mica<\/strong>. Quando feita de maneira est\u00e1tica, a biblioteca \u00e9 est\u00e1tica \ud83d\ude42 , quando feita de modo din\u00e2mico ent\u00e3o podemos falar de biblioteca compartilhada.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Biblioteca Est\u00e1tica<\/strong>: \u00c9 uma cole\u00e7\u00e3o de c\u00f3digo que \u00e9 incorporada diretamente no execut\u00e1vel durante o processo de compila\u00e7\u00e3o. Isso resulta em um arquivo maior, mas independente, pois todas as fun\u00e7\u00f5es necess\u00e1rias est\u00e3o integradas (dentro) ao programa, eliminando a necessidade de bibliotecas externas em tempo de execu\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Biblioteca Compartilhada<\/strong>: Tamb\u00e9m conhecida como biblioteca din\u00e2mica, \u00e9 uma cole\u00e7\u00e3o de c\u00f3digo que n\u00e3o \u00e9 inclu\u00edda no execut\u00e1vel. Em vez disso, \u00e9 carregada na mem\u00f3ria em tempo de execu\u00e7\u00e3o, permitindo que m\u00faltiplos programas usem a mesma biblioteca ao mesmo tempo. Isso economiza espa\u00e7o e facilita a atualiza\u00e7\u00e3o das bibliotecas, mas requer que elas estejam dispon\u00edveis no sistema para o programa funcionar corretamente. apenas uma c\u00f3pia da biblioteca \u00e9 carregada na mem\u00f3ria, quando ela \u00e9 usada por v\u00e1rios programas. Aqui, o vinculador (linker) n\u00e3o copia nenhum c\u00f3digo da biblioteca para o arquivo do programa.<\/li>\n<\/ul>\n\n\n\n<p><strong>Tempo de execu\u00e7\u00e3o<\/strong> (ou runtime) refere-se ao per\u00edodo durante o qual um programa \u00e9 executado no sistema, ap\u00f3s ter sido compilado e iniciado. Durante o tempo de execu\u00e7\u00e3o, o programa realiza suas opera\u00e7\u00f5es, como processar dados, interagir com o usu\u00e1rio, acessar arquivos, e utilizar recursos do sistema. \u00c9 nesse momento que bibliotecas din\u00e2micas podem ser carregadas, erros podem ocorrer, e o comportamento do programa \u00e9 determinado de acordo com as condi\u00e7\u00f5es do ambiente e entradas fornecidas.<\/p>\n\n\n\n<div style=\"font-family: Arial, sans-serif; max-width: 600px; margin: 20px;\">\n    \n    <!-- Compila\u00e7\u00e3o -->\n    <div style=\"background-color: #4CAF50; color: white; padding: 15px; border-radius: 5px; text-align: center;\">\n        <strong>1. Compila\u00e7\u00e3o<\/strong>\n    <\/div>\n    <div style=\"border-left: 5px solid #4CAF50; padding: 10px; margin-bottom: 20px;\">\n        <p style=\"color: #333;\">O compilador transforma o c\u00f3digo fonte em c\u00f3digo de m\u00e1quina, gerando arquivos-objeto.<\/p>\n    <\/div>\n    \n    <!-- Vincula\u00e7\u00e3o -->\n    <div style=\"background-color: #2196F3; color: white; padding: 15px; border-radius: 5px; text-align: center;\">\n        <strong>2. Vincula\u00e7\u00e3o<\/strong>\n    <\/div>\n    <div style=\"border-left: 5px solid #2196F3; padding: 10px; margin-bottom: 20px;\">\n        <p style=\"color: #333;\">O linker combina os arquivos-objeto e os vincula \u00e0s bibliotecas para gerar o arquivo execut\u00e1vel final.<\/p>\n    <\/div>\n    \n    <!-- Tipos de Liga\u00e7\u00e3o -->\n    <div style=\"display: flex; justify-content: space-between;\">\n        \n        <!-- Liga\u00e7\u00e3o Est\u00e1tica -->\n        <div style=\"background-color: #FFC107; color: white; padding: 15px; border-radius: 5px; width: 48%;\">\n            <strong>Liga\u00e7\u00e3o Est\u00e1tica<\/strong>\n            <p style=\"color: white;\">As bibliotecas s\u00e3o inclu\u00eddas diretamente no execut\u00e1vel, resultando em um arquivo maior, mas independente de bibliotecas externas.<\/p>\n        <\/div>\n        \n        <!-- Liga\u00e7\u00e3o Din\u00e2mica -->\n        <div style=\"background-color: #FF5722; color: white; padding: 15px; border-radius: 5px; width: 48%;\">\n            <strong>Liga\u00e7\u00e3o Din\u00e2mica<\/strong>\n            <p style=\"color: white;\">O execut\u00e1vel \u00e9 vinculado a bibliotecas compartilhadas carregadas em tempo de execu\u00e7\u00e3o, resultando em um arquivo menor e facilitando a atualiza\u00e7\u00e3o das bibliotecas.<\/p>\n        <\/div>\n        \n    <\/div>\n<\/div>\n\n\n\n<p>O conceito de bibliotecas compartilhadas n\u00e3o \u00e9 exclusivo do Linux. No Windows, por exemplo, elas s\u00e3o chamadas de DLL (bibliotecas de v\u00ednculo din\u00e2mico).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conven\u00e7\u00f5es de nomenclatura para arquivos-objeto compartilhados<\/h2>\n\n\n\n<p><strong>ESTRUTURA DE NOMES DE BIBLIOTECAS COMPARTILHADAS<\/strong><\/p>\n\n\n\n<p><strong>soname<\/strong> (shared object name) \u00e9 o termo usado para se referir ao nome de biblioteca compartilhada. <\/p>\n\n\n\n<p>Um exemplo \u00e9 <kbd><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>lib<\/strong>pthread<\/mark>.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">so<\/mark>.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">0<\/mark><\/kbd> <br>outro exemplo \u00e9 glibc que no Debian GNU\/Linux 9.9, seu arquivo se chama libc.so.6<\/p>\n\n\n\n<p>Esse nome (soname) segue um padr\u00e3o composto por 3 elementos ou partes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>o nome da biblioteca que geralmente se inicia com <strong>lib<\/strong><\/li>\n\n\n\n<li>so (que significa \u201cshared object\u201d, ou objeto compartilhado<\/li>\n\n\n\n<li>N\u00famero de vers\u00e3o da biblioteca<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>ESTRUTURA DE NOMES DE BIBLIOTECAS EST\u00c1TICA<\/strong><\/p>\n\n\n\n<p>os nomes das bibliotecas est\u00e1ticas terminam em .a, por exemplo libpthread.a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Lista com alguns exemplos de <strong>bibliotecas compartilhadas e est\u00e1ticas<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>libc.so<\/code><\/strong> (Compartilhada) &#8211; Fun\u00e7\u00f5es b\u00e1sicas de C, como manipula\u00e7\u00e3o de strings e opera\u00e7\u00f5es matem\u00e1ticas.<\/li>\n\n\n\n<li><strong><code>libm.so<\/code><\/strong> (Compartilhada) &#8211; Fun\u00e7\u00f5es matem\u00e1ticas avan\u00e7adas, como trigonometria e logaritmos.<\/li>\n\n\n\n<li><strong><code>libgtk-3.so<\/code><\/strong> (Compartilhada) &#8211; Cria\u00e7\u00e3o de interfaces gr\u00e1ficas de usu\u00e1rio (GUI) para aplicativos GTK.<\/li>\n\n\n\n<li><strong><code>libssl.so<\/code><\/strong> (Compartilhada) &#8211; Implementa\u00e7\u00e3o de protocolos de criptografia SSL\/TLS para seguran\u00e7a de comunica\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong><code>libcurl.so<\/code><\/strong> (Compartilhada) &#8211; Transfer\u00eancia de dados com URLs atrav\u00e9s de diversos protocolos.<\/li>\n\n\n\n<li><strong><code>libsqlite3.so<\/code><\/strong> (Compartilhada) &#8211; Gerenciamento de bancos de dados SQLite, permitindo opera\u00e7\u00f5es de banco de dados leves.<\/li>\n\n\n\n<li><strong><code>libpng.a<\/code><\/strong> (Est\u00e1tica) &#8211; Manipula\u00e7\u00e3o de imagens no formato PNG, incluindo leitura e escrita de arquivos PNG.<\/li>\n\n\n\n<li><strong><code>libcrypto.a<\/code><\/strong> (Est\u00e1tica) &#8211; Implementa\u00e7\u00e3o de algoritmos criptogr\u00e1ficos usados pelo OpenSSL para seguran\u00e7a de dados.<\/li>\n<\/ol>\n\n\n\n<p><strong>PASTAS COMUNS DE BIBLIOTECAS<\/strong><\/p>\n\n\n\n<p><strong>Diret\u00f3rios de Bibliotecas em Sistemas Linux<\/strong><\/p>\n\n\n\n<p>Abaixo est\u00e3o alguns diret\u00f3rios comuns onde as bibliotecas s\u00e3o armazenadas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>\/lib<\/code><\/strong>: Armazena bibliotecas essenciais compartilhadas usadas pelo sistema operacional e por programas b\u00e1sicos. Tamb\u00e9m pode incluir algumas bibliotecas est\u00e1ticas. Exemplo: <code>libc.so<\/code> (compartilhada), <code>libm.a<\/code> (est\u00e1tica).<\/li>\n\n\n\n<li><strong><code>\/lib32<\/code><\/strong>: Utilizado em sistemas de 64 bits para armazenar bibliotecas compartilhadas de 32 bits necess\u00e1rias para compatibilidade com aplicativos de 32 bits. Pode tamb\u00e9m conter bibliotecas est\u00e1ticas de 32 bits. Exemplo: <code>libgtk-x11-2.0.so<\/code> (compartilhada).<\/li>\n\n\n\n<li><strong><code>\/lib64<\/code><\/strong>: Destinado a bibliotecas compartilhadas de 64 bits usadas em sistemas operacionais de 64 bits. Pode incluir algumas bibliotecas est\u00e1ticas de 64 bits, embora seja mais comum encontrar bibliotecas compartilhadas aqui. Exemplo: <code>libssl.so<\/code> (compartilhada).<\/li>\n\n\n\n<li><strong><code>\/usr\/lib<\/code><\/strong>: Abriga bibliotecas compartilhadas usadas por aplicativos instalados, al\u00e9m de algumas bibliotecas est\u00e1ticas. Exemplo: <code>libcurl.so<\/code> (compartilhada), <code>libfoo.a<\/code> (est\u00e1tica).<\/li>\n\n\n\n<li><strong><code>\/usr\/local\/lib<\/code><\/strong>: Guarda bibliotecas compartilhadas e est\u00e1ticas instaladas manualmente por administradores ou usu\u00e1rios, fora do gerenciamento padr\u00e3o de pacotes. Exemplo: <code>libmycustomlib.so<\/code> (compartilhada), <code>libmylib.a<\/code> (est\u00e1tica).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Alterando os caminhos da biblioteca compartilhada<\/h2>\n\n\n\n<p>Os programas que usam bibliotecas compartilhadas, ao serem abertos, t\u00eam as bibliotecas abertas pelo linker (vinculador), ou seja, o link \u00e9 quem abre as bibliotecas referenciadas.<\/p>\n\n\n\n<p><strong>ld.so<\/strong> (ou <strong>ld-linux.so<\/strong> em sistemas Linux de 64 bits) \u00e9 o carregador de bibliotecas din\u00e2micas do sistema operacional Linux. Sua principal fun\u00e7\u00e3o \u00e9 carregar as bibliotecas compartilhadas necess\u00e1rias para a execu\u00e7\u00e3o de um programa e resolver as depend\u00eancias dessas bibliotecas.<\/p>\n\n\n\n<p>O vinculador busca por bibliotecas dentro de pastas listadas em <strong>\/etc\/ld.so.conf<\/strong> e em nos arquivos dentro de<strong> \/etc\/ld.so.conf.d<\/strong>.<\/p>\n\n\n\n<p>Normalmente, <strong>\/etc\/ld.so.conf<\/strong> possui somente uma linha &#8220;include&#8221; para os arquivos com nomes terminados em <strong>.conf<\/strong> dentro de <strong>\/etc\/ld.so.conf.d<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat \/etc\/ld.so.conf\ninclude \/etc\/ld.so.conf.d\/*.conf<\/code><\/pre>\n\n\n\n<p>O diret\u00f3rio \/etc\/ld.so.conf.d cont\u00e9m arquivos *.conf:<\/p>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ ls  \/etc\/ld.so.conf.d\/\nfakeroot-x86_64-linux-gnu.conf  libc.conf  x86_64-linux-gnu.conf<\/pre>\n\n\n\n<p>Esses arquivos *.conf devem incluir os caminhos absolutos para os diret\u00f3rios da biblioteca<br>compartilhada:<\/p>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ cat   \/etc\/ld.so.conf.d\/x86_64-linux-gnu.conf \n# Multiarch support\n\/usr\/local\/lib\/x86_64-linux-gnu\n\/lib\/x86_64-linux-gnu\n\/usr\/lib\/x86_64-linux-gnu\n<\/pre>\n\n\n\n<p><strong>LDCONFIG<\/strong><\/p>\n\n\n\n<p>O comando <code><strong>ldconfig<\/strong><\/code> \u00e9 utilizado para atualizar a cache das bibliotecas compartilhadas e criar os links simb\u00f3licos necess\u00e1rios para o correto funcionamento das aplica\u00e7\u00f5es que dependem dessas bibliotecas. Ele l\u00ea as configura\u00e7\u00f5es dos diret\u00f3rios onde as bibliotecas est\u00e3o armazenadas (geralmente especificados em <code>\/etc\/ld.so.conf<\/code> e seus arquivos inclu\u00eddos em \/etc\/ld.so.conf.d\/) e atualiza o arquivo de cache <code>\/etc\/ld.so.cache<\/code>.<\/p>\n\n\n\n<p>Veja alguns exemplos de uso de <code><strong>ldconfig<\/strong><\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Comando<\/th><th>Descri\u00e7\u00e3o<\/th><\/tr><\/thead><tbody><tr><td><code>ldconfig<\/code><\/td><td>Atualiza o cache de bibliotecas e cria os links simb\u00f3licos necess\u00e1rios a partir de <code>\/etc\/ld.so.conf<\/code>.<\/td><\/tr><tr><td><code>ldconfig -v<\/code><\/td><td>Executa o <code>ldconfig<\/code> em modo verboso, exibindo detalhes do processo.<\/td><\/tr><tr><td><code>ldconfig -n \/lib<\/code><\/td><td>Atualiza apenas os links simb\u00f3licos em <code>\/lib<\/code>, sem atualizar o cache.<\/td><\/tr><tr><td><code>ldconfig -N<\/code><\/td><td>Atualiza apenas o cache de bibliotecas, sem mexer nos links simb\u00f3licos.<\/td><\/tr><tr><td><code>ldconfig -p<\/code><\/td><td>Exibe o cache atual das bibliotecas compartilhadas.<\/td><\/tr><tr><td><code>ldconfig -f \/custom\/ld.so.conf<\/code><\/td><td>Usa o arquivo <code>\/custom\/ld.so.conf<\/code> como configura\u00e7\u00e3o alternativa para atualizar o cache.<\/td><\/tr><tr><td><code>ldconfig -r \/mnt\/chroot<\/code><\/td><td>Atualiza o cache de bibliotecas e links simb\u00f3licos em um sistema montado em chroot no diret\u00f3rio <code>\/mnt\/chroot<\/code>.<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\"><code>ldconfig<\/code><\/figcaption><\/figure>\n\n\n\n<p>veja trecho de um exemplo de <strong>ldconfig -v<\/strong><\/p>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ sudo ldconfig -v\nlibnss_files.so.2 -> libnss_files.so.2\n\tlibmemusage.so -> libmemusage.so\n\tliblsan.so.0 -> liblsan.so.0.0.0\n\tlibargon2.so.1 -> libargon2.so.1\n\tlibnss_systemd.so.2 -> libnss_systemd.so.2\n\tlibfreetype.so.6 -> libfreetype.so.6.18.3\n\tlibunwind-x86_64.so.8 -> libunwind-x86_64.so.8.0.1\n\tlibm.so.6 -> libm.so.6\n\n...\n<\/pre>\n\n\n\n<p>podemos ver, por exemplo, como liblsan.so.0 est\u00e1 vinculado ao arquivo-objeto real compartilhado liblsan.so.0.0.0<\/p>\n\n\n\n<p><strong>LD_LIBRARY_PATH<\/strong><\/p>\n\n\n\n<p>O <code><strong>LD_LIBRARY_PATH<\/strong><\/code> \u00e9 uma vari\u00e1vel de ambiente no Linux que especifica diret\u00f3rios adicionais onde o sistema deve procurar por bibliotecas compartilhadas (arquivos <code>.so<\/code>) durante a execu\u00e7\u00e3o de programas. Ela \u00e9 usada para sobrescrever as configura\u00e7\u00f5es padr\u00e3o, permitindo que um programa encontre bibliotecas em locais n\u00e3o padr\u00e3o.<\/p>\n\n\n\n<p><code>LD_LIBRARY_PATH<\/code>, as letras &#8220;L&#8221; e &#8220;D&#8221; t\u00eam os seguintes significados:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>L<\/strong>: Refere-se a &#8220;Library,&#8221; ou seja, bibliotecas.<\/li>\n\n\n\n<li><strong>D<\/strong>: Refere-se a &#8220;Directory,&#8221; ou seja, diret\u00f3rios.<\/li>\n<\/ul>\n\n\n\n<p>Para adicionar um caminho \u00e0 essa vari\u00e1vel fa\u00e7a assim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ LD_LIBRARY_PATH=\/usr\/local\/mylib<\/code><\/pre>\n\n\n\n<p>para validar o valor que acabamos de armazenar dentro da vari\u00e1vel, execute <strong>echo $LD_LIBRARY_PATH<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ echo $LD_LIBRARY_PATH\n\/usr\/local\/mylib<\/code><\/pre>\n\n\n\n<p>Esse tipo de armazenamento que fizemos acima fica dispon\u00edvel apenas para o usu\u00e1rio\/shell atual. Para fazer ficar dispon\u00edvel para qualquer outro processo use &#8220;export&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ export LD_LIBRARY_PATH=\/usr\/local\/mylib<\/code><\/pre>\n\n\n\n<p>Para remover a vari\u00e1vel de ambiente LD_LIBRARY_PATH, basta digitar &#8220;unset&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ unset LD_LIBRARY_PATH<\/code><\/pre>\n\n\n\n<p>Se quiser tornar as altera\u00e7\u00f5es permanentes, escrevemos a linha abaixo dentro de um dos scripts de inicializa\u00e7\u00e3o do Bash, como \/etc\/bash.bashrc ou ~\/.bashrc.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>&#8211; <strong>LD_LIBRARY_PATH<\/strong> \u00e9 para bibliotecas compartilhadas<br>&#8211; <strong>PATH<\/strong> \u00e9 usada para vari\u00e1veis<\/p><\/blockquote><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">depend\u00eancias de um execut\u00e1vel espec\u00edfico<\/h2>\n\n\n\n<p>Use <strong>ldd<\/strong> para buscar as <strong>bibliotecas compartilhadas<\/strong> requeridas por um <strong>programa espec\u00edfico<\/strong>. O comando ldd deve vir seguido do caminho absoluto para o programa.<\/p>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ sudo ldd \/usr\/bin\/ls  \n\tlinux-vdso.so.1 (0x00007ffeeb388000)\n\tlibselinux.so.1 =&gt; \/lib\/x86_64-linux-gnu\/libselinux.so.1 (0x00007f37edd0c000)\n\tlibc.so.6 =&gt; \/lib\/x86_64-linux-gnu\/libc.so.6 (0x00007f37edb24000)\n\tlibpcre2-8.so.0 =&gt; \/lib\/x86_64-linux-gnu\/libpcre2-8.so.0 (0x00007f37eda84000)\n\t\/lib64\/ld-linux-x86-64.so.2 (0x00007f37edd6c000)<\/pre>\n\n\n\n<p>Acima temos o caminho do arquivo da biblioteca compartilhada e o endere\u00e7o de mem\u00f3ria hexadecimal<\/p>\n\n\n\n<p>Tamb\u00e9m, podemos usar ldd para procurar as depend\u00eancias de uma biblioteca compartilahda (objeto compartilhado)<\/p>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ sudo ldd \/lib\/x86_64-linux-gnu\/libselinux.so.1\n\tlinux-vdso.so.1 (0x00007ffe44728000)\n\tlibpcre2-8.so.0 =&gt; \/lib\/x86_64-linux-gnu\/libpcre2-8.so.0 (0x00007ffa5783c000)\n\tlibc.so.6 =&gt; \/lib\/x86_64-linux-gnu\/libc.so.6 (0x00007ffa57654000)\n\t\/lib64\/ld-linux-x86-64.so.2 (0x00007ffa57914000)\n<\/pre>\n\n\n\n<p>Podemos usar -u ou &#8211;unused para exibir bibliotecas n\u00e3o usadas<\/p>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ sudo ldd -u \/usr\/bin\/ls<\/pre>\n\n\n\n<p>A raz\u00e3o para haver depend\u00eancias n\u00e3o utilizadas est\u00e1 relacionada \u00e0s op\u00e7\u00f5es usadas pelo vinculador (linker) ao criar o bin\u00e1rio.<\/p>\n\n\n\n<p>Pode acontecer do programa n\u00e3o precisar da biblioteca mas ela ainda ficar rotulada como necess\u00e1ria (NEEDED) nas informa\u00e7\u00f5es do arquivo-objeto. Podemos usar <strong>readelf<\/strong> ou <strong>objdump<\/strong> que servem para inspecionar arquivos bin\u00e1rios.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong>readelf<\/strong><\/code> exibe informa\u00e7\u00f5es detalhadas sobre arquivos ELF (Executable and Linkable Format), que \u00e9 o formato padr\u00e3o de arquivos bin\u00e1rios no Linux. Ele permite inspecionar v\u00e1rios aspectos de um arquivo ELF, como cabe\u00e7alhos, tabelas de s\u00edmbolos, se\u00e7\u00f5es, e muito mais.<\/li>\n\n\n\n<li><code><strong>objdump<\/strong><\/code> \u00e9 uma ferramenta mais geral que pode ser usada para inspecionar n\u00e3o apenas arquivos ELF, mas tamb\u00e9m outros tipos de arquivos bin\u00e1rios. Al\u00e9m de fornecer informa\u00e7\u00f5es detalhadas, como <code>readelf<\/code>, ele tamb\u00e9m pode desassemblar o c\u00f3digo de um arquivo, mostrando o c\u00f3digo de m\u00e1quina correspondente.<\/li>\n<\/ul>\n\n\n\n<p><strong>Desassemblar<\/strong> \u00e9 o processo de converter c\u00f3digo de m\u00e1quina, que \u00e9 execut\u00e1vel pelo processador, de volta para uma representa\u00e7\u00e3o em linguagem assembly, que \u00e9 mais leg\u00edvel para humanos. Essa pr\u00e1tica \u00e9 usada para analisar o funcionamento interno de programas, depurar c\u00f3digo, ou entender melhor um bin\u00e1rio quando o c\u00f3digo-fonte original n\u00e3o est\u00e1 dispon\u00edvel.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ readelf -h \/usr\/bin\/ls<\/pre>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ objdump -a  \/usr\/bin\/ls<\/pre>\n\n\n\n<pre><font color=\"#00CD00\"><b>elder@debian12<\/b><\/font>:<font color=\"#0000EE\"><b>~<\/b><\/font>$ objdump -d  \/usr\/bin\/ls<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bibliotecas compartilhadas (ou objetos compartilhados) s\u00e3o arquivos que cont\u00eam c\u00f3digo que pode ser usado por m\u00faltiplos programas ao mesmo tempo. No Linux, essas bibliotecas geralmente t\u00eam a extens\u00e3o .so (shared object). Elas s\u00e3o carregadas na mem\u00f3ria apenas uma vez, e diferentes programas podem acessar esse c\u00f3digo compartilhado para executar fun\u00e7\u00f5es comuns, como manipula\u00e7\u00e3o de arquivos&#8230;<\/p>\n<p class=\"more-link-wrap\"><a href=\"https:\/\/categoriaoutros.com.br\/?p=16163\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &ldquo;Linux LPI 102.3: Controle de bibliotecas compartilhadas&rdquo;<\/span> &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,2918],"tags":[4835],"class_list":["post-16163","post","type-post","status-publish","format-standard","hentry","category-informatica-dicas","category-linux","tag-lpi"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Linux LPI 102.3: Controle de bibliotecas compartilhadas - Categoria Outros<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/categoriaoutros.com.br\/?p=16163\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Linux LPI 102.3: Controle de bibliotecas compartilhadas - Categoria Outros\" \/>\n<meta property=\"og:description\" content=\"Bibliotecas compartilhadas (ou objetos compartilhados) s\u00e3o arquivos que cont\u00eam c\u00f3digo que pode ser usado por m\u00faltiplos programas ao mesmo tempo. No Linux, essas bibliotecas geralmente t\u00eam a extens\u00e3o .so (shared object). Elas s\u00e3o carregadas na mem\u00f3ria apenas uma vez, e diferentes programas podem acessar esse c\u00f3digo compartilhado para executar fun\u00e7\u00f5es comuns, como manipula\u00e7\u00e3o de arquivos...Read More &ldquo;Linux LPI 102.3: Controle de bibliotecas compartilhadas&rdquo; &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/categoriaoutros.com.br\/?p=16163\" \/>\n<meta property=\"og:site_name\" content=\"Categoria Outros\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/categoriaoutros\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-12T14:45:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-13T18:02:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/pinguim-paginas-padrao.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1022\" \/>\n\t<meta property=\"og:image:height\" content=\"722\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Categoria: Outros\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CategoriaOutros\" \/>\n<meta name=\"twitter:site\" content=\"@CategoriaOutros\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Categoria: Outros\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=16163#article\",\"isPartOf\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=16163\"},\"author\":{\"name\":\"Categoria: Outros\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40\"},\"headline\":\"Linux LPI 102.3: Controle de bibliotecas compartilhadas\",\"datePublished\":\"2024-08-12T14:45:52+00:00\",\"dateModified\":\"2024-08-13T18:02:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=16163\"},\"wordCount\":2153,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\"},\"keywords\":[\"LPI\"],\"articleSection\":[\"Inform\u00e1tica\",\"Linux\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/categoriaoutros.com.br\/?p=16163#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=16163\",\"url\":\"https:\/\/categoriaoutros.com.br\/?p=16163\",\"name\":\"Linux LPI 102.3: Controle de bibliotecas compartilhadas - Categoria Outros\",\"isPartOf\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#website\"},\"datePublished\":\"2024-08-12T14:45:52+00:00\",\"dateModified\":\"2024-08-13T18:02:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=16163#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/categoriaoutros.com.br\/?p=16163\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=16163#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/categoriaoutros.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linux LPI 102.3: Controle de bibliotecas compartilhadas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#website\",\"url\":\"https:\/\/categoriaoutros.com.br\/\",\"name\":\"Categoria Outros\",\"description\":\"Assuntos Diversos\",\"publisher\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/categoriaoutros.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\",\"name\":\"Categoria Outros\",\"alternateName\":\"Categoria Outros\",\"url\":\"https:\/\/categoriaoutros.com.br\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg\",\"contentUrl\":\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg\",\"width\":400,\"height\":400,\"caption\":\"Categoria Outros\"},\"image\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/categoriaoutros\",\"https:\/\/twitter.com\/CategoriaOutros\",\"https:\/\/br.pinterest.com\/CategoriaOutros\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40\",\"name\":\"Categoria: Outros\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g\",\"caption\":\"Categoria: Outros\"},\"sameAs\":[\"http:\/\/categoriaoutros.com.br\"],\"url\":\"https:\/\/categoriaoutros.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Linux LPI 102.3: Controle de bibliotecas compartilhadas - Categoria Outros","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/categoriaoutros.com.br\/?p=16163","og_locale":"pt_BR","og_type":"article","og_title":"Linux LPI 102.3: Controle de bibliotecas compartilhadas - Categoria Outros","og_description":"Bibliotecas compartilhadas (ou objetos compartilhados) s\u00e3o arquivos que cont\u00eam c\u00f3digo que pode ser usado por m\u00faltiplos programas ao mesmo tempo. No Linux, essas bibliotecas geralmente t\u00eam a extens\u00e3o .so (shared object). Elas s\u00e3o carregadas na mem\u00f3ria apenas uma vez, e diferentes programas podem acessar esse c\u00f3digo compartilhado para executar fun\u00e7\u00f5es comuns, como manipula\u00e7\u00e3o de arquivos...Read More &ldquo;Linux LPI 102.3: Controle de bibliotecas compartilhadas&rdquo; &raquo;","og_url":"https:\/\/categoriaoutros.com.br\/?p=16163","og_site_name":"Categoria Outros","article_publisher":"https:\/\/www.facebook.com\/categoriaoutros","article_published_time":"2024-08-12T14:45:52+00:00","article_modified_time":"2024-08-13T18:02:09+00:00","og_image":[{"width":1022,"height":722,"url":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/pinguim-paginas-padrao.webp","type":"image\/webp"}],"author":"Categoria: Outros","twitter_card":"summary_large_image","twitter_creator":"@CategoriaOutros","twitter_site":"@CategoriaOutros","twitter_misc":{"Escrito por":"Categoria: Outros","Est. tempo de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/categoriaoutros.com.br\/?p=16163#article","isPartOf":{"@id":"https:\/\/categoriaoutros.com.br\/?p=16163"},"author":{"name":"Categoria: Outros","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40"},"headline":"Linux LPI 102.3: Controle de bibliotecas compartilhadas","datePublished":"2024-08-12T14:45:52+00:00","dateModified":"2024-08-13T18:02:09+00:00","mainEntityOfPage":{"@id":"https:\/\/categoriaoutros.com.br\/?p=16163"},"wordCount":2153,"commentCount":0,"publisher":{"@id":"https:\/\/categoriaoutros.com.br\/#organization"},"keywords":["LPI"],"articleSection":["Inform\u00e1tica","Linux"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/categoriaoutros.com.br\/?p=16163#respond"]}]},{"@type":"WebPage","@id":"https:\/\/categoriaoutros.com.br\/?p=16163","url":"https:\/\/categoriaoutros.com.br\/?p=16163","name":"Linux LPI 102.3: Controle de bibliotecas compartilhadas - Categoria Outros","isPartOf":{"@id":"https:\/\/categoriaoutros.com.br\/#website"},"datePublished":"2024-08-12T14:45:52+00:00","dateModified":"2024-08-13T18:02:09+00:00","breadcrumb":{"@id":"https:\/\/categoriaoutros.com.br\/?p=16163#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/categoriaoutros.com.br\/?p=16163"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/categoriaoutros.com.br\/?p=16163#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/categoriaoutros.com.br\/"},{"@type":"ListItem","position":2,"name":"Linux LPI 102.3: Controle de bibliotecas compartilhadas"}]},{"@type":"WebSite","@id":"https:\/\/categoriaoutros.com.br\/#website","url":"https:\/\/categoriaoutros.com.br\/","name":"Categoria Outros","description":"Assuntos Diversos","publisher":{"@id":"https:\/\/categoriaoutros.com.br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/categoriaoutros.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/categoriaoutros.com.br\/#organization","name":"Categoria Outros","alternateName":"Categoria Outros","url":"https:\/\/categoriaoutros.com.br\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/","url":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg","contentUrl":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg","width":400,"height":400,"caption":"Categoria Outros"},"image":{"@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/categoriaoutros","https:\/\/twitter.com\/CategoriaOutros","https:\/\/br.pinterest.com\/CategoriaOutros\/"]},{"@type":"Person","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40","name":"Categoria: Outros","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g","caption":"Categoria: Outros"},"sameAs":["http:\/\/categoriaoutros.com.br"],"url":"https:\/\/categoriaoutros.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/16163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16163"}],"version-history":[{"count":26,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/16163\/revisions"}],"predecessor-version":[{"id":16243,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/16163\/revisions\/16243"}],"wp:attachment":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16163"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}