[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [xmlblaster] Compiling cpp client in mac osx
Hi,
if have added a
int main()
{
  struct hostent hostbuf, *hostP = 0;
  char *tmphstbuf=0;
  size_t hstbuflen=0;
  char serverHostName[256];
  strcpy(serverHostName, "localhost");
  hostP = gethostbyname_re(serverHostName, &hostbuf, &tmphstbuf, 
&hstbuflen);
  printf("Hello '%s'\n", hostP->h_name);
  return 0;
}
to msgUtil.c, please check it out from svn and compile it with
cd xmlBlaster/src/c/util
gcc -g -Wall -o msgUtil msgUtil.c helper.c -I.. -DMSG_UTIL_MAIN=1
and now edit the settings in msgUtil.c and play with the different variants:
--------------------
#ifndef _WINDOWS   /* Windows does not support the reentrant ..._r() 
functions */
#  if defined(__sun)
#    define HAVE_FUNC_GETHOSTBYNAME_R_5 /* SUN */
#  elif defined(__alpha)
#    define HAVE_FUNC_GETHOSTBYNAME_R_3 /* OSF1 V5.1 1885 alpha */
#  elif defined(__FreeBSD__)
#    define LOCAL_GETHOSTBYNAME_R /* FreeBSD */
/* this should actually work for other platforms... so long as they 
support pthreads */
#  elif defined(__hpux) /* with gcc 2.8 - 3.4.3 */
#  else
#    define HAVE_FUNC_GETHOSTBYNAME_R_6 /* Linux */
#  endif
#endif
---------------------
... throw away everything and try the different defines directly.
(I know this is the most ugly code ever seen).
Please report which setting works for you and which __xyz??__ is defined
implicitely for MAC OS.
Ricardo Jorge Jota wrote:
Hi,
What was the change you made?
Did the C client compile well without changes (build c), where the 
problems in C++ only?
The problems is in the #include<malloc.h> 
(./src/c/util/queue/SQLiteQueue.c:#include <malloc.h>).
Now, in Mac  - using Fink - you have two include locations : /sw/lib 
and /usr/lib. The sw is the Fink one, the usr is the os x system one.
The include malloc.h is in /usr/lib/malloc/malloc.h. In linux the 
right path is: /usr/lib/malloc.h. In order to solve this I changed the 
source code, but i'm not sure the best way to do this.
we should add an include directive into build.xml, for now you
could try in build.properties:
 CFLAGS=-I/usr/lib/malloc
or on command line
 build -verbose -DCFLAGS=-I/usr/lib/malloc c-delete c-lib
thanks
Marcel
After this problem was solved the following command (the ./build 
-verbose cpp showed me the command)
gcc -g -prebind -dynamiclib -o libxmlBlasterClientCD.dylib 
../build.tmp/objCD/helper.o 
../build.tmp/objCD/XmlBlasterAccessUnparsed.o 
../build.tmp/objCD/CallbackServerUnparsed.o 
../build.tmp/objCD/XmlBlasterConnectionUnparsed.o 
../build.tmp/objCD/msgUtil.o ../build.tmp/objCD/xmlBlasterSocket.o 
../build.tmp/objCD/SQLiteQueue.o ../build.tmp/objCD/Properties.o 
../build.tmp/objCD/xmlBlasterZlib.old: warning prebinding disabled 
because of undefined symbols
This is the C shared lib linking output on my Linux box:
gcc -g -shared -o libxmlBlasterClientCD.so 
../build.tmp/objCD/helper.o 
../build.tmp/objCD/XmlBlasterAccessUnparsed.o 
../build.tmp/objCD/CallbackServerUnparsed.o 
../build.tmp/objCD/XmlBlasterConnectionUnparsed.o 
../build.tmp/objCD/msgUtil.o ../build.tmp/objCD/xmlBlasterSocket.o 
../build.tmp/objCD/SQLiteQueue.o ../build.tmp/objCD/Properties.o 
../build.tmp/objCD/xmlBlasterZlib.o -L/opt/sqlite-bin/lib -lsqlite 
-L/opt/zlib-bin/lib -lz
I wonder why cpptasks leaves away the sqlite and zlib in your case 
(pthread is not needed explicitly on Linux).
I think the problem lies within the -prebind flag. From what I could 
gather this allows you to remove the gcc -L and -l flags. Although i'm 
not sure about this it seams that the /sw/lib path -the fink path - 
isn't prebound (OSX prebind all their dylib.). I'm not sure if you can 
disable -prebind in the cpp-tasks when the MAC OSX system is found.
Unfortunately _gethostbyname_r doesn't get solved and after 
"googling" it seems that this symbols doesn't exist in OS X.
This is just the thread safe variant of gethostbyname().
Please add your own gethostbyname_r() variant in your code and 
implement it using
gethostbyname().
I'd love to implement a new one. But I have some questions about you 
code. First and foremost i'd like to test the ones already coded. Now 
if I read you code correctly you use #defines to select the correct 
one. As the darwin - the osx "kernel"- is mostly bsd maybe the bsd 
implementation works. But I don't know how to find the correct #define 
value for osx. Can you shed some light on this ?
Thank in advance,
Ricardo Jota