[racket-dev] Build failure on OS X

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Thu Apr 21 22:17:28 EDT 2011

The recent change to `configure' makes it use `pkg-config' to add -L
and -I flags for libffi. But those should flags be added consistently;
that is, you should end up with a build that uses `libiconv' from
macports.

Did you run `configure' in a fresh build directory? If not, maybe you
have files leftover from a previous build that had different flags from
`configure'?

If not, can you show the compile line for "string.c"?

At Thu, 21 Apr 2011 22:01:31 -0400, Eric Dobson wrote:
> I don't have any *FLAGS variables set in my environment when I run configure or 
> make. But I do have libiconv installed through macports. It was out of date, 
> and I upgraded it, but now I am getting a different message:
> 
> gcc -o Racket.framework/Versions/5.1.1.3/Racket  -m32 -pthread -framework 
> CoreFoundation -dynamiclib -all_load  libracket.a libmzgc.a -ldl -lm  -liconv 
> -L/opt/local/lib -lffi   
> ld: warning: in /opt/local/lib/libiconv.dylib, file was built for unsupported 
> file format which is not the architecture being linked (i386)
> Undefined symbols:
>   "_iconv_close", referenced from:
>       _do_convert in libracket.a(string.o)
>       _do_convert in libracket.a(string.o)
>       _do_convert in libracket.a(string.o)
>       _string_to_from_locale in libracket.a(string.o)
>       _string_to_from_locale in libracket.a(string.o)
>       _string_to_from_locale in libracket.a(string.o)
>       _close_converter in libracket.a(string.o)
>   "_iconv_open", referenced from:
>       _do_convert in libracket.a(string.o)
>       _string_to_from_locale in libracket.a(string.o)
>       _string_to_from_locale in libracket.a(string.o)
>       _scheme_open_converter in libracket.a(string.o)
>   "_iconv", referenced from:
>       _do_convert in libracket.a(string.o)
> ld: symbol(s) not found
> collect2: ld returned 1 exit status
> 
> (Note the warning about a different architecture.)
> 
> I assume that If I tell it to use the system version of iconv, things will work 
> out. But how do I tell it to ignore the bad version?
> 
> -Eric
> 
> 
> 
> On Apr 21, 2011, at 9:48 PM, Matthew Flatt wrote:
> 
> > It looke like you have `-L/opt/local/lib' in your LDFLAGS
> > configuration. Do you also have `-I/opt/local/include' in CPPFLAGS?
> > 
> > You machine is probably like mine, where you have two installations of
> > libiconv, and this error happens when the C headers of one installation
> > get mixed with the lib of the other.
> > 
> > At Thu, 21 Apr 2011 21:42:54 -0400, Eric Dobson wrote:
> >> I tried to build the git HEAD today and ran into problems. During the make 
> >> process, it fails to create the framework with the following error message:
> >> 
> >> gcc -o Racket.framework/Versions/5.1.1.3/Racket  -m32 -pthread -framework 
> >> CoreFoundation -dynamiclib -all_load  libracket.a libmzgc.a -ldl -lm  
> -liconv 
> >> -L/opt/local/lib -lffi   
> >> Undefined symbols:
> >>  "_iconv_close", referenced from:
> >>      _do_convert in libracket.a(string.o)
> >>      _do_convert in libracket.a(string.o)
> >>      _do_convert in libracket.a(string.o)
> >>      _string_to_from_locale in libracket.a(string.o)
> >>      _string_to_from_locale in libracket.a(string.o)
> >>      _string_to_from_locale in libracket.a(string.o)
> >>      _close_converter in libracket.a(string.o)
> >>  "_iconv_open", referenced from:
> >>      _do_convert in libracket.a(string.o)
> >>      _string_to_from_locale in libracket.a(string.o)
> >>      _string_to_from_locale in libracket.a(string.o)
> >>      _scheme_open_converter in libracket.a(string.o)
> >>  "_iconv", referenced from:
> >>      _do_convert in libracket.a(string.o)
> >> ld: symbol(s) not found
> >> collect2: ld returned 1 exit status
> >> 
> >> Does anyone know what might cause this?
> >> 
> >> Thanks,
> >> Eric
> >> 
> >> 
> >> _________________________________________________
> >>  For list-related administrative tasks:
> >>  http://lists.racket-lang.org/listinfo/dev


Posted on the dev mailing list.