[PD-dev] Problem Compiling Ratts on Cygwin

Hans-Christoph Steiner hans at eds.org
Mon Jun 30 12:31:27 CEST 2008


Check out trunk/externals/Makefile, that's where the stuff is for  
building Pd-extended on MinGW.  By the linker errors, it looks like  
you are not linking to the pd.dll.

.hc

On Jun 30, 2008, at 10:56 AM, Bryan Jurish wrote:

> moin Daniel, moin list
>
> ... cc'ing this message to pd-dev, as discussed ...
>
> for those of you listers who may have missed the beginning of this
> discussion (e.g. pretty much all of you), we're trying to get [ratts]
> built on a windoof box, without much success.  not being a windoof  
> user
> myself, i'd appreciate any tips anyone could offer regarding external
> compilation on such machines; in particular CFLAGS, LDFLAGS, LIBS, etc
> etc... some relevant snippets of the discussion to date follow...
>
> On 2008-06-29 01:00:15, "daniel c. howe" <dhowe at mrl.nyu.edu>  
> appears to
> have written:
>> Bryan Jurish wrote:
>>> moin Daniel,
>>>
>>> it just occurred to me that pd builds on cygwin are notoriously
>>> difficult: did you actually get pd to build and run?  Quoting from
>>> http://puredata.info/docs/developer/WindowsXPI386 :
>>>> Pd doesn't build in Cygwin. You have to use MSYS.
>> nope, wasnt able to get it to build via cygwin... so just running a
>> binary so far
>
> hmm, where did you get the binary?  are you sure it wasn't built e.g.
> with MSYS (or worse yet with MSVC) and not with cygwin at all?
>
> for msys builds i could potentially try out some of these hacks myself
> on the pd build farm machine: are you maybe running a pd-extended  
> build?
>
>>> at any rate, assuming you got pd built on cygwin, it would help  
>>> to know
>>> how the "standard" externals got built (a make log from pd/src and
>>> especially pd/extra would be helpful here): this should give us a  
>>> good
>>> idea of the flags used.
>
> ... again, for msys builds, we could probably lift the relevant flags
> from the pd-extended build system.
>
>> same error after running autogen:
>> ==================================
>> ratts.c:1: warning: -fPIC ignored for target (all code is position
>> independent)
>
> ok, we can leave out -fPIC, but it shouldn't hurt to leave it in...
>
>> gcc -O2 -fno-strict-aliasing -fPIC -Wall -Winline     -o ratts.dll
>> -export_dynam
>> ic -shared parwave.o klatt_frame.o elements.o squeue.o dsqueue.o
>> rholmes.o phfea
>> t.o pd_holmes.o alhash.o phtoelm.o pd_phtoelm.o darray.o phoneutils.o
>> trie.o tex
>> t.o english.o saynum.o ratts_keyval.o suspect.o ASCII.o klatt~.o
>> holmes.o holmes
>> -feat.o holmes-mask.o phones2holmes.o guessphones.o number2text.o
>> rattshash.o ra
>> ttstok.o toupper.o spellout.o ratts.o
>> klatt_frame.o:klatt_frame.c:(.text+0x19): undefined reference to  
>> `_gensym'
>> klatt_frame.o:klatt_frame.c:(.text+0x2a): undefined reference to  
>> `_gensym'
>> klatt_frame.o:klatt_frame.c:(.text+0x3b): undefined reference to  
>> `_gensym'
>> klatt_frame.o:klatt_frame.c:(.text+0x4c): undefined reference to  
>> `_gensym'
>> klatt_frame.o:klatt_frame.c:(.text+0x5d): undefined reference to  
>> `_gensym'
>> klatt_frame.o:klatt_frame.c:(.text+0x6e): more undefined  
>> references to
>> `_gensym'
>>  follow
>> klatt_frame.o:klatt_frame.c:(.text+0x304): undefined reference to  
>> `_error'
>
> same ol' linker error, likely due to missing linker flags (e.g.
> "-export_dynamic -shared" for linux externals)
>
>>>>>  ... whatever cygwin builds call pd externals (what's
>>>>> the extension of e.g. $PD_ROOT/extra/expr.* ?).
>>>> ====================================
>>>> dhowe at wonderdog /cygdrive/c/pd
>>>> $ ls extra/expr*
>>>> extra/expr-help.pd  extra/expr.dll  extra/expr~.dll
>>>>
>>>> extra/expr~:
>>>> LICENSE.txt  makefile  vexp.lib         vexp_fun.obj
>>>> vexp_if.pd_linux_o
>>>> README.txt   vexp.c    vexp.obj         vexp_fun.pd_linux_o
>>>> expr.dll     vexp.exp  vexp.pd_linux_o  vexp_if.c
>>>> fts_to_pd.h  vexp.h    vexp_fun.c       vexp_if.obj
>>>
>>> odd... looks like you've got both .dll and .lib. afaik, .lib is a  
>>> static
>>> library and .dll a dynamic one.  pd externals are (at least on  
>>> linux and
>>> osx) dynamic libraries: i'm guessing .dll is the way to go...
>
> anyone on the list know why both .lib and .dll get built on windoof?
> also, what the heck are the .pd_linux_o files we're seeing here?
>
>>>>> afaik, pd (vanilla) doesn't build or require any libraries  
>>>>> (except maybe
>>>>> "-lm").  i don't use pd-extended, so i can't tell you there...  
>>>>> if there
>>>>> are any global pd libraries, you'll probably need to link them in.
>>>> these are the libs I find in pd:
>>>> ===============================
>>>> dhowe at wonderdog /cygdrive/c/pd
>>>> $ find . -name *.lib -print
>>>> ./bin/asiolib.lib
>>>> ./bin/pd.lib
>>>> ./bin/pdtcl.lib
>>>> ./bin/pthreadVC.lib
>>>> ./bin/tcl84.lib
>>>> ./bin/tclstub84.lib
>>>> ./bin/tk84.lib
>>>> ./bin/tkstub84.lib
>>>> ./extra/bonk~/bonk~.lib
>>>> ./extra/choice/choice.lib
>>>> ./extra/expr~/vexp.lib
>>>> ./extra/fiddle~/fiddle~.lib
>>>> ./extra/loop~/loop~.lib
>>>> ./extra/lrshift~/lrshift~.lib
>>>> ./extra/pique/pique.lib
>>>> ./extra/sigmund~/sigmund~.lib
>>>> ./lib/asio/asiolib.lib
>>>> ./src/pthreadVC.lib
>>> 	
>>> ... so you might need to link in any or all of the libs in bin/ ...
>>> getting the order right could be tricky though.  in general, gcc  
>>> likes
>>> "highest-level" libraries left-most in the list. my guess would be
>>> something like "-lpd -lpdtcl -ltk84 -ltkstub84 -ltcl84 -ltclstub84
>>> -lasiolib -lpthreadVC" ... but I might be wrong.
>>>
>> I seem to get that same error no matter what order I use... though  
>> if I
>> add a non-existent library,
>> it chokes on that... also if I add pd.lib as the last argument, I  
>> get a
>> different msg, but adding the
>> others doesn't help:
>
> addendum: it's probably best to add "-l" flags (aka $LIBS) at the  
> *end*
> of the linker command line: "gcc $LDFLAGS -o $OUTFILE $OBJS $LIBS".
> also, i see no reason why we ought to need to link in both the .lib  
> and
> the .dll : linking in the .dll ought to be enough, if I'm not  
> mistaken.
>
>> $gcc  -L/cygdrive/c/pd/bin -lpd -lpdtcl -ltk84 -ltkstub84 -ltcl84
>> -ltclstub84 -la
>> siolib -lpthreadVC -Wall -Winline -o ratts.dll  parwave.o  
>> klatt_frame.o
>> elements
>> .o squeue.o dsqueue.o rholmes.o phfeat.o pd_holmes.o alhash.o  
>> phtoelm.o
>> pd_phtoe
>> lm.o darray.o phoneutils.o trie.o text.o english.o saynum.o
>> ratts_keyval.o suspe
>> ct.o ASCII.o klatt~.o holmes.o  holmes-feat.o holmes-mask.o
>> phones2holmes.o gues
>> sphones.o number2text.o rattshash.o rattstok.o toupper.o spellout.o
>> ratts.o /cyg
>> drive/c/pd/bin/pd.lib /cygdrive/c/pd/bin/pdtcl.lib
>> /cygdrive/c/pd/bin/tk84.lib
>> /cygdrive/c/pd/bin/tkstub84.lib /cygdrive/c/pd/bin/tcl84.lib
>> /cygdrive/c/pd/bin/
>> asiolib.lib  /cygdrive/c/pd/bin/pthreadVC.lib
>>
>> klatt~.o:klatt~.c:(.text+0x357): undefined reference to `_s_signal'
>> klatt~.o:klatt~.c:(.text+0x35f): undefined reference to `_s_bang'
>> klatt~.o:klatt~.c:(.text+0x713): undefined reference to `_s_list'
>> holmes.o:holmes.c:(.text+0x5c): undefined reference to `_s_list'
>> holmes.o:holmes.c:(.text+0x70): undefined reference to `_s_bang'
>> holmes.o:holmes.c:(.text+0x283): undefined reference to `_s_list'
>> holmes.o:holmes.c:(.text+0x3df): undefined reference to `_s_list'
>> holmes-feat.o:holmes-feat.c:(.text+0x3b): undefined reference to  
>> `_s_list'
>> holmes-feat.o:holmes-feat.c:(.text+0xd9): undefined reference to  
>> `_s_list'
>> holmes-mask.o:holmes-mask.c:(.text+0x7a): undefined reference to  
>> `_s_list'
>> holmes-mask.o:holmes-mask.c:(.text+0x3c2): more undefined  
>> references to
>> `_s_list
>> ' follow
>> ...
>
> ok, so it looks like we're getting at least the functions resolved by
> the linker (no more complaints about gensym()), but the constant  
> symbols
> still aren't getting resolved... ideas, anyone?
>
> marmosets,
> 	Bryan
>
> -- 
> Bryan Jurish                           "There is *always* one more  
> bug."
> jurish at ling.uni-potsdam.de      -Lubarsky's Law of Cybernetic  
> Entomology
>
>
> _______________________________________________
> Pd-dev mailing list
> Pd-dev at iem.at
> http://lists.puredata.info/listinfo/pd-dev



------------------------------------------------------------------------ 
----

As we enjoy great advantages from inventions of others, we should be  
glad of an opportunity to serve others by any invention of ours; and  
this we should do freely and generously.         - Benjamin Franklin






More information about the Pd-dev mailing list