Markus Neteler wrote:
> Thanks Markus, I updated from CVS and now get the error:
> multiple definition of `_db_driver_execute_immediate'
Exactly this (only) error I get when compiling on Mac OSX statically.
Dirty solution:
go to lib/db/stubs/execute.c and rename the function to something else.
Then it compiles.
Clean solution:
find it! Why does only this function cause problems but no others
in stubs?
My guess is that the problem occurs when a driver provides its own
version of db_driver_execute_immediate(), but doesn't provide either
db_driver_begin_transaction() or db_driver_commit_transaction() (i.e.
the other two functions in lib/db/stubs/execute.c).
If I'm correct (you don't specify exactly which directories are
failing to compile), the DBF, MySQL and ODBC drivers will fail, while
the PostgreSQL driver should succeed.
A static library (.a) is just an "archive" of object (.o) files,
similar to a .zip or .tar file. When linking against a .a file, the
linker only uses the .o files which are actually needed (i.e. that
export one or more symbols which would otherwise be undefined).
If a driver provides its own version of all three of the functions
from lib/db/stubs/execute.c, the linker won't need to the execute.o
file from libgrass_dbstubs.a, so it won't include it in the link.
Similarly, if a driver provided none of the three functions, the
linker would include the execute.o file from libgrass_dbstubs.a, but
there wouldn't be any conflicts.
OTOH, if the driver provides db_driver_execute_immediate() but not the
other two, the linker will include the execute.o file from
libgrass_dbstubs.a, resulting in two conflicting versions of
db_driver_execute_immediate().
The simplest solutions would be to either:
1. Split lib/db/stubs/execute.c into two separate files, moving the
transaction functions into a separate file (presumably these functions
will always form a matched pair, i.e. a driver will either implement
both or implement neither).
2. Remove the stubs library altogether, and make each driver have its
own copy of any stub functions.
--
Glynn Clements <glynn.clements@virgin.net>