Re: writing a foreign data wrapper for hdfs, but getting and undefined symbol error for hdfsConnect - Mailing list pgsql-general

From Rob_pg
Subject Re: writing a foreign data wrapper for hdfs, but getting and undefined symbol error for hdfsConnect
Date
Msg-id 201110251424.47272.robert7390@comcast.net
Whole thread Raw
In response to Re: writing a foreign data wrapper for hdfs, but getting and undefined symbol error for hdfsConnect  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: writing a foreign data wrapper for hdfs, but getting and undefined symbol error for hdfsConnect  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
Hi Tom,

Thanks for the tip, I altered the gcc invocation as follows:

Here are the two gcc invocations originally creating the shared library:

gcc -Wall -fPIC -c mylibrary.c -o mylibrary.o \
-I $(A) -I $(B) -I $(C) -I $(E) -lhdfs

gcc -I $(A) -I $(B) -I $(C) -I $(E) -shared\
-Wl,-soname,mylibrary.so -o mylibrary.so mylibrary.o

#############################
Here's the new invocations: I added "-lhdfs" to the second gcc invocation.

gcc -I $(A) -I $(B) -I $(C) -I $(E) -shared\
 -lhdfs -Wl,-soname,mylibrary.so -o mylibrary.so mylibrary.o

Now I can see the libraries!

ldd mylibrary.so
        linux-vdso.so.1 =>  (0x00007fff499c5000)
        libhdfs.so.0 => /usr/lib/libhdfs.so.0 (0x00007f44e4739000)
        libc.so.6 => /lib/libc.so.6 (0x00007f44e43b6000)
        libjvm.so => /usr/lib/jvm/java-6-
openjdk/jre/lib/amd64/server/libjvm.so (0x00007f44e3866000)
        libdl.so.2 => /lib/libdl.so.2 (0x00007f44e3662000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00007f44e3445000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f44e4b66000)
        libm.so.6 => /lib/libm.so.6 (0x00007f44e31c1000)


> "Rob_pg" <robert7390@comcast.net> writes:
> > I've been working on creating a foreign data wrapper for hdfs on using
> > version 9.1.0. This is my first time creating C functions against
> > postgres, so hopefully this falls under the 'newbie' category and is
> > easy to solve.
> >
> > The source code code does compile resulting in a shared library:
> >
> > file mylibrary.so: ELF 64-bit LSB shared object, x86-64, version 1
> > (SYSV), dynamically linked, not stripped
> >
> > ldd mylibrary.so
> >
> >         linux-vdso.so.1 =>  (0x00007fff40fff000)
> >         libc.so.6 => /lib/libc.so.6 (0x00007f3adb8cc000)
> >         /lib64/ld-linux-x86-64.so.2 (0x00007f3adbe72000)
>
> The reason it's not working is that libhdfs.so isn't listed as a
> requirement for mylibrary.so.  You did not show us your link command
> for mylibrary.so, but most likely there needs to be a -lhdfs in it.
>
>             regards, tom lane

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: missing chunk 0 for toast value ...
Next
From:
Date:
Subject: explicit deadlock-victim-priority mechanism