On Fri, 18 Jul 2008, James E Keenan wrote: > Parrot has been building successfully, albeit slowly, for me on Darwin for > several months now. But I must say that the very last line of 'make' output > always shows a lot of warnings of "multiple definitions of symbol". Can > anyone evaluate these? Thanks. > > /usr/bin/g++ -o pbc_merge \ > src/pbc_merge.o \ > src/parrot_config.o \ > src/string_primitives.o \ > -L/Users/jimk/work/parrot/blib/lib -L/Users/jimk/work/parrot/blib/lib > -lparrot -lm -lgmp -lreadline -framework OpenGL -framework GLUT -lcrypto > -lintl -undefined dynamic_lookup -L/sw/lib > /usr/bin/ld: warning multiple definitions of symbol _str_dup > src/string_primitives.o definition of _str_dup in section (__TEXT,__text) > /Users/jimk/work/parrot/blib/lib/libparrot.dylib(string_primitives.o) > definition of _str_dup [more similar warnings omitted]
The problem is that src/string_primitives.o is being included twice: It is already included in libparrot.dylib, but it is also being included explicitly on the link line. That strikes me as quite odd. I suspect the explicit linking to src/string_primitives.o can be omitted when building pbc_merge. The other odd thing about this link line is the trailing -L/sw/lib at the very very end. That's odd. Usually, the -L flags go *before* the libraries. It may be that Darwin's linker is insensitive to such details, but, parrot shouldn't assume that all linkers are similarly insensitive. -- Andy Dougherty [EMAIL PROTECTED]