<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: C/C++: cannot open shared object file</title>
	<atom:link href="http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/feed/" rel="self" type="application/rss+xml" />
	<link>http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/</link>
	<description>Programadores, uni-vos!</description>
	<lastBuildDate>Fri, 18 May 2012 17:09:46 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: bogado</title>
		<link>http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/#comment-546</link>
		<dc:creator>bogado</dc:creator>
		<pubDate>Mon, 03 Aug 2009 13:52:41 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/?p=481#comment-546</guid>
		<description>Só uma coisa que sempre atrapalha, lembre-se que se o seu programa tem que rodar com suid o LD_LIBRARY_PATH e outras variaveis de ambiente LD_* são ignoradas, por medidas de segurança. Por isso a unica solução neste caso é usar o run_path.</description>
		<content:encoded><![CDATA[<p>Só uma coisa que sempre atrapalha, lembre-se que se o seu programa tem que rodar com suid o LD_LIBRARY_PATH e outras variaveis de ambiente LD_* são ignoradas, por medidas de segurança. Por isso a unica solução neste caso é usar o run_path.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jorge Pereira</title>
		<link>http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/#comment-545</link>
		<dc:creator>Jorge Pereira</dc:creator>
		<pubDate>Thu, 30 Jul 2009 00:54:03 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/?p=481#comment-545</guid>
		<description>@Andre: Sim, desde que o cache esteja atualizado atraves do comando ldconfig</description>
		<content:encoded><![CDATA[<p>@Andre: Sim, desde que o cache esteja atualizado atraves do comando ldconfig</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: andreyevbr</title>
		<link>http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/#comment-544</link>
		<dc:creator>andreyevbr</dc:creator>
		<pubDate>Wed, 29 Jul 2009 22:22:09 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/?p=481#comment-544</guid>
		<description>Ops, a lista de libs compartilhadas também pode ser mantida no arquivo /etc/ld.so.conf, não?</description>
		<content:encoded><![CDATA[<p>Ops, a lista de libs compartilhadas também pode ser mantida no arquivo /etc/ld.so.conf, não?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jorge Pereira</title>
		<link>http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/#comment-543</link>
		<dc:creator>Jorge Pereira</dc:creator>
		<pubDate>Wed, 29 Jul 2009 17:22:50 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/?p=481#comment-543</guid>
		<description>Cássio, acho que não!

Para esquema do uso da LD_PRELOAD e preciso que seu objeto tenha declarações explicitas do tipo &quot;constructor&quot;, exemplo abaixo!

## wrap.c:
#define _GNU_SOURCE
#include
#include

static void wrap_init(void) __attribute__((constructor));
static FILE *(*s_fopen)(const char *, const char *);

FILE *fopen(const char *path, const char *mode)
{
        printf(&quot;Olá, wrapper para fopen: %p\n&quot;, s_fopen);
        if(!s_fopen) {
                printf(&quot;Ops, endereço NULL\n&quot;);
                return NULL;
        }
        return s_fopen(path, mode);
}

static void wrap_init(void)
{
        s_fopen = dlsym(RTLD_NEXT, &quot;fopen&quot;);
        printf(&quot;Init: %p\n&quot;, s_fopen);
}
## End wrap.c

## lib.c
#include
static void lib_init(void) __attribute__((constructor));
static void lib_init(void) {
   fopen(&quot;foo.txt&quot;, &quot;r&quot;);
}
## End lib.c

# Compila ele como shared
# gcc  -shared -o libninja-wrapper.so wrapper.c lib.c

Dai o seu programa que por exemplo venha a chamar a função fopen() e por sua vez utiliza o LD_PRELOAD, dai será possível fazer um &quot;catch&quot; da função!

# LD_PRELOAD=./libninja-wrapper.so ./seu-programa-que-dentr-chama-fopen

Abraços!
[]s</description>
		<content:encoded><![CDATA[<p>Cássio, acho que não!</p>
<p>Para esquema do uso da LD_PRELOAD e preciso que seu objeto tenha declarações explicitas do tipo &#8220;constructor&#8221;, exemplo abaixo!</p>
<p>## wrap.c:<br />
#define _GNU_SOURCE<br />
#include<br />
#include</p>
<p>static void wrap_init(void) __attribute__((constructor));<br />
static FILE *(*s_fopen)(const char *, const char *);</p>
<p>FILE *fopen(const char *path, const char *mode)<br />
{<br />
        printf(&#8220;Olá, wrapper para fopen: %p\n&#8221;, s_fopen);<br />
        if(!s_fopen) {<br />
                printf(&#8220;Ops, endereço NULL\n&#8221;);<br />
                return NULL;<br />
        }<br />
        return s_fopen(path, mode);<br />
}</p>
<p>static void wrap_init(void)<br />
{<br />
        s_fopen = dlsym(RTLD_NEXT, &#8220;fopen&#8221;);<br />
        printf(&#8220;Init: %p\n&#8221;, s_fopen);<br />
}<br />
## End wrap.c</p>
<p>## lib.c<br />
#include<br />
static void lib_init(void) __attribute__((constructor));<br />
static void lib_init(void) {<br />
   fopen(&#8220;foo.txt&#8221;, &#8220;r&#8221;);<br />
}<br />
## End lib.c</p>
<p># Compila ele como shared<br />
# gcc  -shared -o libninja-wrapper.so wrapper.c lib.c</p>
<p>Dai o seu programa que por exemplo venha a chamar a função fopen() e por sua vez utiliza o LD_PRELOAD, dai será possível fazer um &#8220;catch&#8221; da função!</p>
<p># LD_PRELOAD=./libninja-wrapper.so ./seu-programa-que-dentr-chama-fopen</p>
<p>Abraços!<br />
[]s</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cássio</title>
		<link>http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/#comment-542</link>
		<dc:creator>Cássio</dc:creator>
		<pubDate>Wed, 29 Jul 2009 17:15:26 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/?p=481#comment-542</guid>
		<description>ops. O sanitize comeu parte do meu comentário. seria
$ LD_PRELOAD=&lt;caminho para o .so&gt;  ./test</description>
		<content:encoded><![CDATA[<p>ops. O sanitize comeu parte do meu comentário. seria<br />
$ LD_PRELOAD=&lt;caminho para o .so&gt;  ./test</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cássio</title>
		<link>http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/#comment-541</link>
		<dc:creator>Cássio</dc:creator>
		<pubDate>Wed, 29 Jul 2009 17:14:00 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/?p=481#comment-541</guid>
		<description>Faz tempo que não faço isso, mas acho que
$ LD_PRELOAD= ./test
funcionaria.</description>
		<content:encoded><![CDATA[<p>Faz tempo que não faço isso, mas acho que<br />
$ LD_PRELOAD= ./test<br />
funcionaria.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jorge Pereira</title>
		<link>http://codare.net/2009/07/29/cc-cannot-open-shared-object-file/#comment-540</link>
		<dc:creator>Jorge Pereira</dc:creator>
		<pubDate>Wed, 29 Jul 2009 14:25:56 +0000</pubDate>
		<guid isPermaLink="false">http://codare.net/?p=481#comment-540</guid>
		<description>Olá!

Não somente configurar a variável LD_LIBRARY_PATH para o diretório onde está explicitamente a biblioteca como também para o diretório corrente!

export LD_LIBRARY_PATH=&quot;.&quot;

ou

export LD_LIBRARY_PATH=&quot;.:${LD_LIBRARY_PATH}&quot;

[]s</description>
		<content:encoded><![CDATA[<p>Olá!</p>
<p>Não somente configurar a variável LD_LIBRARY_PATH para o diretório onde está explicitamente a biblioteca como também para o diretório corrente!</p>
<p>export LD_LIBRARY_PATH=&#8221;.&#8221;</p>
<p>ou</p>
<p>export LD_LIBRARY_PATH=&#8221;.:${LD_LIBRARY_PATH}&#8221;</p>
<p>[]s</p>
]]></content:encoded>
	</item>
</channel>
</rss>

