It tells you the symbol is undefined. Did you out the .o file in the lib?
Dave
On Tue, Feb 9, 2010 at 4:07 PM, sanjuan34 <> wrote:
Thanks Jim,
libvca.a is in /usr/lib/ocera
ts7000:/usr/lib/ocera# file libvca.a
libvca.a: current ar archive
ts7000:/usr/lib/ocera# ar t libvca.a
eds_utils.o
vca_base.o
vca_dinfomgr.o
vca_fdpoll.o
vca_net.o
vca_od.o
vca_pdo.o
vca_pollfdnodecan.o
vca_ulogdstub.o
vca_utils.o
vcasdo_fsm.o
vcasdo_msg.o
I've also listed the symbols in libvca.a to make sure vca_open_handle is in there:
nm -s libvca.a |grep vca_open_handle
vca_open_handle in vca_base.o
000000c0 T vca_open_handle
U vca_open_handle
Today I compiled (on the TS, then later cross-compiled) ocera-lincan-src.tar.gz from scratch and tried using libvca from those builds, and still the same problem. I even created "libmyvca.a" from the appropriate .o files, just...to see. No luck.
It would appear that gcc is seeing libvca.a (as a test I've removed it and I get /usr/bin/ld: cannot find -lvca), and of course nm shows
vca_open_handle (and others) as valid symbols. I've also tried a few different functions, and I get undefined references to them.
It appears the problem is in the linker stage, as gcc actually builds CANBus.o, but then ld fails to "see" the symbols in libvca.a.
It's kind of crazy. I've never seen this problem before.
-Jesse
--- In ts-7000%40yahoogroups.com, Jim Jackson <> wrote:
>
>
>
>
> On Tue, 9 Feb 2010, sanjuan34 wrote:
>
> > Lemme try this again...
> >
> > I'm using a TS-CAN1 on a TS-7350. When I attempt to use a function from libvca, I'm receiving an error during linking stating that the function I'm calling is an undefined reference. I'm getting this error both compiling on the TS, and cross-compiling on a linux box (with arm-linux-gcc).
> >
> > To try to figure this out I've simplified things as much as I can. Here's the error I'm getting:
> >
> > gcc -I/usr/include/ocera -L/usr/lib/ocera -lvca CANBus.o -o arm_nodecontroller
>
> from what you say below, gcc is obviously not seeing the lib.
> Ok simple questions - which directory is the library file libvca.a in?
> Is that directory in the gcc library search path?
> Is it readable by the user running the gcc?
> What is the output of
>
> cd directory_containing_libvca.a
> file libvca.a
> ar t libvca.a
>
>
>
> >
> > CANBus.o: In function `main':
> > CANBus.c:(.text+0x38): undefined reference to `vca_open_handle'
> > collect2: ld returned 1 exit status
> >
> > CANBus.c looks like this (like I said, I've stripped nearly everything out):
> >
> > #include "can_vca.h"
> >
> > int main(void)
> > {
> > vca_handle_t canhandle;
> > const char *candev = "/dev/can0";
> >
> > vca_open_handle(&canhandle, candev, 0, 0);
> >
> > }
> >
> > As a test I've tried other functions from libvca and gotten the same error. I'm really at a loss here, and I'm not sure where to proceed.
> >
> > Thanks
> > -Jesse
> >
> >
> >
>
__._,_.___
__,_._,___
|