Complete.Org: Mailing Lists: Archives: freeciv-dev: April 2004:
[Freeciv-Dev] Re: Failing to link with a QPE client -- any hints?
Home

[Freeciv-Dev] Re: Failing to link with a QPE client -- any hints?

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: Frederic Briere <fbriere@xxxxxxxxxxx>
Cc: freeciv-dev@xxxxxxxxxxx
Subject: [Freeciv-Dev] Re: Failing to link with a QPE client -- any hints?
From: Raimar Falke <i-freeciv-lists@xxxxxxxxxxxxx>
Date: Mon, 19 Apr 2004 10:59:12 +0200

On Mon, Apr 19, 2004 at 02:53:17AM -0400, Frederic Briere wrote:
> Hi guys!
> 
> I'm trying to get Rob Fisher's Zaurus Freeciv client [1] to compile
> cleanly with the current Freeciv tree.  (The original version builds
> on 1.12 beta and overwrites the Makefiles.)  I figure there's not much
> hope of anybody picking up its development until this is done.
> 
> [1] http://www.robfisher.net/zaurus/freeciv.html
> 
> I think I'm almost there, but there's this one error which I just can't
> understand, and I was hoping that someone could shed some light on it:
> 
>   make[1]: Entering directory `/freeciv-1.14.1/client'
>   gcc  -g -O2 -Wall   -o civclient     attribute.o citydlg_common.o 
> cityrepdata.o civclient.o chatline_common.o climisc.o clinet.o control.o 
> goto.o helpdata.o mapctrl_common.o mapview_common.o messagewin_common.o 
> packhand.o plrdlg_common.o options.o repodlgs_common.o tilespec.o audio.o 
> audio_none.o gui-qpe/libguiclient.a ../common/libcivcommon.a 
> gui-qpe/libguiclient.a ../common/libcivcommon.a -L/usr/share/qte2/lib -lqte 
> -lqpe agents/libagents.a -L/usr/share/qte2/lib -lqte -lqpe  
>   agents/libagents.a(agents.o)(.text+0x4aa): In function `agents_free':
>   /freeciv-1.14.1/client/agents/agents.c:327: undefined reference to 
> `free_timer'
>   agents/libagents.a(agents.o)(.text+0x515): In function `register_agent':
>   /freeciv-1.14.1/client/agents/agents.c:346: undefined reference to 
> `new_timer'
>   agents/libagents.a(agents.o)(.text+0x9be): In function `wait_for_requests':
>   /freeciv-1.14.1/client/agents/agents.c:636: undefined reference to 
> `start_timer'
>   
> agents/libagents.a(agents.o)(.text+0x9d3):/freeciv-1.14.1/client/agents/agents.c:638:
>  undefined reference to `stop_timer'
>   agents/libagents.a(cma_core.o)(.text+0x2b2b): In function `cma_init':
>   /freeciv-1.14.1/client/agents/cma_core.c:1900: undefined reference to 
> `new_timer'
>   agents/libagents.a(cma_core.o)(.text+0x2b8f): In function `cma_free':
>   /freeciv-1.14.1/client/agents/cma_core.c:1917: undefined reference to 
> `free_timer'
>   agents/libagents.a(cma_core.o)(.text+0x2bef): In function 
> `cma_query_result':
>   /freeciv-1.14.1/client/agents/cma_core.c:1941: undefined reference to 
> `start_timer'
>   
> agents/libagents.a(cma_core.o)(.text+0x2c15):/freeciv-1.14.1/client/agents/cma_core.c:1943:
>  undefined reference to `stop_timer'
>   collect2: ld returned 1 exit status
> 
> 
> What's got me stumped is that all timer functions are actually there in
> libcivcommon.a; it seems that linking against gui-qpe/libguiclient.a
> (the client I'm trying to merge in) somehow prevents the linker from
> seeing the timer functions.  I checked, and there are no functions with
> the same name in the gui-qpe tree.
> 
> I thought it might be a problem with my version of automake/autoconf,
> but the xaw client still links correctly after I remake the Makefiles.
> 
> I also thought there might be a conflict with the QT/Opie libraries, but
> even when I don't link them in, I still get these errors (and a
> gazillion more, of course).
> 
> Mixing C and C++ has a tendency of bringing up weird bugs, but I can't
> understand how the gui-qpe code can prevent two other libraries from
> linking to each other.

> Could the fact that struct timer is not defined (only declared) in
> timing.h have something to do with this?  

I doubt this since we do this all over the place.

> Anybody has any ideas?  I'm at the end of my rope...

You can examine the object files:
$ nm common/timing.o|grep start_timer
00000210 T start_timer
$ nm common/libcivcommon.a|grep start_timer
00000210 T start_timer

I suspect that somehow your libcivcommon.a doesn't contain the symbol
in question.

As a last resort you can also remove the timers from the agents file.

        Raimar

-- 
 email: rf13@xxxxxxxxxxxxxxxxx
 "It is not yet possible to change operating system by writing
  to /proc/sys/kernel/ostype."              sysctl(2) man page


[Prev in Thread] Current Thread [Next in Thread]