ld and libsmbclient

Steven McClellan steve at mcclellan.org
Tue Mar 9 14:06:39 GMT 2004


On Tuesday, Mar. 9 2004 Peter Waechtler wrote:

>Didn't they tell you to post an error message? ;)

Here is the error message:

[steve at localhost steve]$ gcc testsmbc.cc
/usr/local/samba/lib/libsmbclient.so -o testsmbc
/tmp/cczi0mto.o(.text+0x1f3): In function `main':
: undefined reference to `smbc_init(void (*)(char const*, char const*,
char*, int, char*, int, char*, int), int)'
/tmp/cczi0mto.o(.eh_frame+0x11): undefined reference to
`__gxx_personality_v0'
collect2: ld returned 1 exit status

>> I am having some difficulty making ld resolve the functions in the 
>> libsmbclient.so when linking.  I am using samba 3.0.2a on a fully 
>> patched red hat 9 system and the shared library is being built ok.  
>> There must be something wrong with the shared library installation.  
>> Could somebody please walk me through all of the steps necessary for 
>> getting the library installed correctly.  The make install only copied 
>> the libsmbclient.so.
>>
>> I have added the path to libsmbclient.so in the ld.so.conf file and 
>> run ldconfig.  I have also verified that the libsmbclient.so is in the 
>> ld.so.cache by doing a ldconfig -p.  Everything looks good but ld 
>> cannot resolve the smbc_init function (or any other function from the 
>> library). If I remove the the library path for libsmbclient and then 
>> run ldconfig again, ld will produce another error message saying that 
>> it can't find the library instead of saying that it can't resolve the 
>> function.
>>
>$ nm /usr/lib/libsmbclient3.so| grep smbc_init
>00020980 T smbc_init
>00020400 T smbc_init_context
>000b2580 b smbc_initialized

>the capital "T" denotes an exported text (code) symbol. If it's a "t" then
it's not exported (defined as static in the code >perhaps).

Yup, the functions are exported as they have the capital "T", just like your
listing.

>> I suspect that there is a dependent library or some other similar 
>> problem but I can't figure it out.  I would run ldd on the executable 
>> to check for missing libraries but since I can't link and get an 
>> executable file, I'm stuck.  I have tried several different versions 
>> of samba, all with the same result so I must be missing something.
>>
>So you try to link your program against libsmbclient.so?

>gcc sample.c -L /where/is/smbclient.so -lsmbclient

Yes, except my file extension is .cc instead of .c which I expect changes
everything.  I'm not sure what is going on here but I expect that it may be
C++ name mangling?  If I change my test code to have a .c extension instead
of a .cc extension then everything works as expected.  The problem is that
all of my other code has a .cc extension and so I need to have the samba
code compile and link within the same environment.  Is there something easy
that I can do to have the libsmbclient.so library be able to link in a C++
world?

-Steve





More information about the samba-technical mailing list