[freetds] Compiling and using FreeTDS on Mac OS X
Daniel Fazekas
fdsubs at axelero.hu
Sat Sep 6 20:23:05 EDT 2003
I'm trying to get a test environment for some of my sites up and running
on Mac OS X. The last few remaining hurdles include FreeTDS, which I'd
then like to use to interface with a single Microsoft SQL Server 2000
(SP3a + various hotfixes) via PHP (4.33, with the mssql extension using
dblib) and sqsh.
I have no problems at all using FreeTDS to interface the very same
target SQL Server (running on Windows 2000 Server) from various releases
of Linux.
Getting FreeTDS to compile and work properly on Mac OS X unfortunately
seems less simple. I have searched the mailing list archives and there
was already some former conversation on the subject; some even having
success in the end. However, that was with some really old versions,
from the 0.53 era, and it looks like things are just looking worse going
ahead.
Specs:
Mac OS X 10.2.6 (Jaguar) with December 2002 Developer Tools
Fink 0.5.3 is also installed with some various Unix tools missing from
the former two.
gcc -v says "Apple Computer, Inc. GCC version 1175, based on gcc version
3.1 20020420 (prerelease)"
configure doesn't complain about anything, and the problems doesn't seem
to matter based on what options I'm giving it (thread safety or no, etc;
which was mentioned as a possible solution to some of the OS X problems
in the list archives).
***
using 0.61.2, make dies after seemingly having compiled everything
successfully, during the linking process:
/bin/sh ../../libtool --mode=link gcc -g -O2 -o libtds.la -rpath
/usr/local/lib -version-info 2:0
:0 libtds_objects.la ../replacements/libreplacements.la
gcc -dynamiclib -flat_namespace -undefined suppress -o
.libs/libtds.2.0.0.dylib -all_load ./.libs/
libtds_objects.a ../replacements/.libs/libreplacements.a
./.libs/libtds_objects.a ../replacements/.
libs/libreplacements.a -lc -install_name /usr/local/lib/libtds.2.dylib
-compatibility_version 3 -current_version 3.0
ld: multiple definitions of symbol _tds_alloc_compute_results
./.libs/libtds_objects.a(mem.o) definition of _tds_alloc_compute_results
in section (__TEXT,__text)
./.libs/libtds_objects.a(mem.o) definition of _tds_alloc_compute_results
in section (__TEXT,__text)
And this repeated for what I suspect is every single symbol defined in
FreeTDS. Over three pages of the same error message, repeating with
different files and different names.
It's always libtds_object.a, the .o file varies between mem.o, token.o,
util.o, login.o, read.o, write.o, convert.o, numeric.o, config.o,
query.o, iconv.o, locale.o, challenge.o, threadsafe.o, vstrbuild.o,
md4.o, des.o, tdsstring.o, getmac.o, atoll.o.
While most are code symbols, there's a few in data sections too, such as:
ld: multiple definitions of symbol _tds_str_empty
./.libs/libtds_objects.a(tdsstring.o) definition of _tds_str_empty in
section (__DATA,__data)
./.libs/libtds_objects.a(tdsstring.o) definition of _tds_str_empty in
section (__DATA,__data)
I'm not posting the whole several pages of error messages for now;
because in the list archives I've seen someone already had trouble doing
that (message size limit) - and anyway, it's nothing new.
The same problem occurs with freetds-pre-utf8.tgz downloaded from
freetds's current folder.
***
Using freetds-0.62.dev.20030903 from Freddy's homepage, the make process
breaks even sooner, trying to compile iconv.c:
Making all in replacements
source='iconv.c' object='iconv.lo' libtool=yes \
depfile='.deps/iconv.Plo' tmpdepfile='.deps/iconv.TPlo' \
depmode=gcc /bin/sh ../../depcomp \
/bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I.
-I../../include -I../../include -D_FREETDS_LIBRARY_SOURCE -DTDS50
-DIODBC -D_REENTRANT -D_THREAD_SAFE -DDEBUG=1 -Wall -Wstrict-prototypes
-Wmissing-prototypes -g -O2 -c -o iconv.lo `test -f 'iconv.c' || echo
'./'`iconv.c
rm -f .libs/iconv.lo
gcc -DHAVE_CONFIG_H -I. -I. -I../../include -I../../include
-D_FREETDS_LIBRARY_SOURCE -DTDS50 -DIODBC -D_REENTRANT -D_THREAD_SAFE
-DDEBUG=1 -Wall -Wstrict-prototypes -Wmissing-prototypes -g -O2 -c
iconv.c -Wp,-MD,.deps/iconv.TPlo -fno-common -DPIC -o .libs/iconv.lo
iconv.c:202: illegal expression, found `;'
cpp-precomp: warning: errors during smart preprocessing, retrying in
basic mode
iconv.c: In function `iconv':
iconv.c:202: parse error before ';' token
make[2]: *** [iconv.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1
I have to admit I have no idea what could be causing it
replacements/iconv.c has this on line 203, which looks fine to me:
return (size_t)(-1);
The same problem occurs with freetds-0.62.dev.20030814 extracted from
freetds-current.tgz from freetds.org's links.
***
And the strange one: I could get freetds-0.60 to make fine following the
instructions in the mailing list archives. (About specifying thread
safety or just editing src/tds/asprintf.c to make some of the functions
use the thread safe version unconditionally.)
"make install" went fine as well.
Still, php's make process breaks then (all's fine and working without
trying to add mssql support, that is, freetds):
In file included from /usr/local/include/sybfront.h:23,
from /usr/local/include/sqlfront.h:23,
from
/Users/fds/install/php/php-4.3.3/ext/mssql/php_mssql.h:36,
from main/internal_functions.c:55:
/usr/local/include/sybdb.h:97: parse error before numeric constant
/usr/local/include/sybdb.h:139: parse error before numeric constant
/usr/local/include/sybdb.h:166: parse error before numeric constant
/usr/local/include/sybdb.h:166: warning: no semicolon at end of struct
or union
/usr/local/include/sybdb.h:169: parse error before '}' token
/usr/local/include/sybdb.h:169: warning: data definition has no type or
storage class
/usr/local/include/sybdb.h:193: parse error before numeric constant
/usr/local/include/sybdb.h:193: warning: no semicolon at end of struct
or union
/usr/local/include/sybdb.h:195: parse error before '}' token
/usr/local/include/sybdb.h:195: warning: data definition has no type or
storage class
/usr/local/include/sybdb.h:204: parse error before numeric constant
/usr/local/include/sybdb.h:204: warning: no semicolon at end of struct
or union
/usr/local/include/sybdb.h:217: parse error before '*' token
/usr/local/include/sybdb.h:217: warning: data definition has no type or
storage class
/usr/local/include/sybdb.h:218: parse error before '*' token
/usr/local/include/sybdb.h:218: warning: data definition has no type or
storage class
/usr/local/include/sybdb.h:227: parse error before '}' token
/usr/local/include/sybdb.h:227: warning: data definition has no type or
storage class
/usr/local/include/sybdb.h:256: parse error before '*' token
/usr/local/include/sybdb.h:258: parse error before '*' token
And this same error message continued for every single line up until
line 606, with a few (5-6) exceptions when the error message is somewhat
else (not the parse error before '*' token one).
Besides, I'd much prefer to use at least 0.61... :)
Of course I'd be happy to give more information on anything needed and
try any possible solution.
Any help on getting it work would be much appreciated, thanks,
--
Daniel
More information about the FreeTDS
mailing list