On 29/05/2007, at 4:36 PM, Peter O'Gorman wrote:
Adding '-fnested-functions' to the CFLAGS stops the compiler barfing. However as per Apple Tech note http:// developer.apple.com/technotes/tn2006/tn2161.html it is also necessary to add -fnested-functions or an equivalent ld flag to the compiler link command. Without this flag, the linker defaults to disable_stack_execute on i386 and the library crashes at runtime.

Adding -fnested-functions to libfoo_la_LDFLAGS does not work because libtool strips it out before invoking gcc.

Is there a way around this or an actual fix?

LDFLAGS=-Wl,-allow_stack_execute does not work?

I just sent the message below to the Apple xcode-users list:

TN2161 says that -fnested-functions can be passed to the compiler driver in a link command to send the "-allow_stack_execute" flag to the linker.

However, libtool seems to choke on it thus:
gcc -B ../../tools -dynamiclib -fnested-functions -o .libs/ libswarm.0.0.0.dylib .libs/SwarmEnvironment.o .libs/ classList.o .libs/libswarm.lax/libspace.a/Ca2d.o
*** lots of objects removed ****
.libs/libswarm.lax/libswarmobjc.a/thr.o -L/Library/Frameworks/ Swarm.framework/Versions/Current/Resources/lib -L/Library/ Frameworks/Tk.framework/Versions/8.4-X11/lib -L/usr/X11R6/lib - lpthread /Library/Frameworks/Swarm.framework/Versions/Current/ Resources/lib/libffi.dylib -lBLT24 -lXpm /Library/Frameworks/ Swarm.framework/Versions/Current/Resources/lib/libpng12.dylib / Library/Frameworks/Swarm.framework/Versions/Current/Resources/lib/ libhdf5.dylib -lz -lX11 -lm -ldl -Wl,-search_paths_first - framework CoreFoundation -framework CoreFoundation -framework Tk - framework Tcl -install_name /Library/Frameworks/Swarm.framework/ Versions/2.2/lib/libswarm.0.dylib -Wl,-compatibility_version -Wl,1 - Wl,-current_version -Wl,1.0 /usr/bin/libtool: unknown option character `l' in: - allow_stack_execute Usage: /usr/bin/libtool -static [-] file [...] [-filelist listfile [,dirname]] [-arch_only arch] [-sacLT] Usage: /usr/bin/libtool -dynamic [-] file [...] [-filelist listfile [,dirname]] [-arch_only arch] [-o output] [-install_name name] [- compatibility_version #] [-current_version #] [-seg1addr 0x#] [- segs_read_only_addr 0x#] [-segs_read_write_addr 0x#] [- seg_addr_table <filename>] [-seg_addr_table_filename <file_system_path>] [-all_load] [-noall_load]
make[4]: *** [libswarm.la] Error 1

Ho hum

This was done bodging -fnested-functions option into the configured libtool script.

I will try the -Wl option but libtool seems to strip all flags that it does not recognise.

Have to dash now
Bill

_______________________________________________
http://lists.gnu.org/mailman/listinfo/libtool

Reply via email to