What is the difference between -Wl,--export-dynamic and -Wl,-export-dynamic (single vs double-dash)?

380 Views Asked by At

A user of xnec2c was trying to build on OSX with clang and got this error:

gcc --pedantic -Wall -std=gnu11 -O2 -g -Wformat -Werror=format-security -fpie -Wno-overlength-strings -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE -DGDK_PIXBUF_DISABLE_DEPRECATED -DG_DISABLE_DEPRECATED -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-honor-nans -fno-signed-zeros -fno-math-errno -Wl,--export-dynamic -Wl,--as-needed  -o xnec2c main.o mathlib.o measurements.o interface.o callbacks.o console.o callback_func.o calculations.o cmnd_edit.o geom_edit.o gnuplot.o draw.o draw_structure.o draw_radiation.o fields.o fork.o geometry.o ground.o xnec2c.o input.o matrix.o utils.o nec2_model.o network.o optimize.o plot_freqdata.o radiation.o rc_config.o shared.o somnec.o xnec2c-resources.o -L/opt/local/lib -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl  -lpthread -lm
ld: unknown option: --export-dynamic
clang: error: linker command failed with exit code 1 (use -v to see invocation)

(FYI: GTK Builder needs the export-dynamic linking flag.)

This discussion suggests making the double-dash a single dash:

-AM_LDFLAGS = -Wl,--export-dynamic
+AM_LDFLAGS = -Wl,-export-dynamic

However the user found that, actually, it needs a single dash and an underscore (maybe, still having trouble that could be related, but at least ld stopped barking about the option):

-AM_LDFLAGS = -Wl,--export-dynamic
+AM_LDFLAGS = -Wl,-export_dynamic

Questions:

  • Does single-dash -Wl,-export-dynamic work in both GCC and Clang?
  • Whats with the underscore version as -Wl,-export_dynamic?
  • How compatible is that option with older (and newer) versions of the GCC/Clang stacks?
  • Other considerations or best practice?
1

There are 1 best solutions below

0
On BEST ANSWER
  • Both GNU ld and LLVM lld take --export-dynamic flag
  • ld that ships with OS X takes -export_dynamic flag
  • This has nothing to do with gcc or clang, these only pass the flag along to the linker