Skip to content

Commit a8273fc

Browse files
alyssaisxzyfer
authored andcommitted
Remove -undefined error, --no-undefined LDFLAGS
As far as I can tell, `-undefined error` was introduced mistakenly to replace `--no-undefined`, which doesn't work Apple's cctools' ld. The problem is, `-undefined error` _only_ works on cctools' ld. This is much less noticeable than the original problem, because GCC's ld won't complain, it just won't do the right thing. The Solaris linker, on the other hand, _will_ complain: ld: fatal: file error: open failed: No such file or directory This is a misleading error message, but what it is actually telling us is that it can't open a file named "error", which it tries to do because it doesn't recognise "-undefined" as an option that can take an argument. We can demonstrate that this doesn't have the desired effect in GCC too. Consider this a C source file, main.c, containing the following: extern void hello(void); int main(void) { hello(); } If we compile this using the command `gcc -fPIC -shared main.c`, we will get no indication that the `hello` function we are trying to call has never been defined. This is for, as the GCC documentation puts it, "historial reasons". If we don't want this, we can pass `--no-undefined` to the linker, like this: gcc -fPIC -shared -Wl,--no-undefined main.c This is what the Makefile used to do, before being changed. Running this command will produce an error informing us of our mistake: /tmp/ccGRJkJ8.o: In function `main': main.c:(.text+0xc): undefined reference to `hello' collect2: error: ld returned 1 exit status However, trying to use the cctools' ld's equivalent reveals that GCC's ld definitely does not interpret it the same way. This command will succeed, just the same as the one where we specified no explicit linker options at all. I don't want to speculate on what effect, if any, `-undefined error` has on GCC's ld, but it definitely isn't the right one. After some discussion, we've decided it's best to just remove these flags.
1 parent 2ebf465 commit a8273fc

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ else
2424
CXXFLAGS += -O1 -fno-omit-frame-pointer
2525
LDFLAGS += -O1 -fno-omit-frame-pointer
2626
endif
27-
LDFLAGS += -Wl,-undefined,error
28-
CAT ?= $(if $(filter $(OS),Windows_NT),type,cat)
27+
CAT ?= $(if $(filter $(OS),Windows_NT),type,cat)
2928

3029
ifneq (,$(findstring /cygdrive/,$(PATH)))
3130
UNAME := Cygwin

0 commit comments

Comments
 (0)