2012-05-14 03:17:48

by Du, ChangbinX

[permalink] [raw]
Subject: [Resend PATCH] tools/usb: fix a makefile bug

I try to compile tools/usb foler, but got below error(gcc version
4.6.3):
tools/usb/testusb.c:516: undefined reference to `pthread_create'
tools/usb/testusb.c:541: undefined reference to `pthread_join'
The reason is the makefile puts source files behind of compiler option
"-l". For gcc(and clang), it reads compiler options in order from left
to right. When compiler gets a source file, it starts parsing it and try
to resolve all symbols invoked. If compiler can not resolve a symbol, it
will read --remain-- options and try get a definition of the symbol. So,
if we put source file behind of "-l" option, the specified library will
not work.

Signed-off-by: Du Changbin <[email protected]>
---
tools/usb/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/usb/Makefile b/tools/usb/Makefile
index 396d6c4..e1cfd19 100644
--- a/tools/usb/Makefile
+++ b/tools/usb/Makefile
@@ -7,7 +7,7 @@ CFLAGS = $(WARNINGS) -g $(PTHREAD_LIBS) -I../include

all: testusb ffs-test
%: %.c
- $(CC) $(CFLAGS) -o $@ $^
+ $(CC) $^ $(CFLAGS) -o $@

clean:
$(RM) testusb ffs-test
--
1.7.9.5


2012-05-14 04:20:57

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [Resend PATCH] tools/usb: fix a makefile bug

On Mon, May 14, 2012 at 03:17:42AM +0000, Du, ChangbinX wrote:
> I try to compile tools/usb foler, but got below error(gcc version
> 4.6.3):
> tools/usb/testusb.c:516: undefined reference to `pthread_create'
> tools/usb/testusb.c:541: undefined reference to `pthread_join'
> The reason is the makefile puts source files behind of compiler option
> "-l". For gcc(and clang), it reads compiler options in order from left
> to right. When compiler gets a source file, it starts parsing it and try
> to resolve all symbols invoked. If compiler can not resolve a symbol, it
> will read --remain-- options and try get a definition of the symbol. So,
> if we put source file behind of "-l" option, the specified library will
> not work.
>
> Signed-off-by: Du Changbin <[email protected]>

I think that's a regression in your version of gcc, as 4.6.2 here works
just fine with no errors.

What distro's version of gcc are you using here? What changed between
4.6.2 and 4.6.3 that would do this?

I just tried 4.5.3 and it worked just fine as well.

I'm thinking something might be messed up on your end here, and this
patch isn't really needed.

thanks,

greg k-h