-
Notifications
You must be signed in to change notification settings - Fork 17.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cmd/ld: Malformed PE file: Unexpected flags for PE section .idata$2 #5106
Labels
Milestone
Comments
gcc rejects your libc_urg.so file: C:\tmp\bbbb\src\bitbucket.org\mikaelbe\sotest\src\sotest>go build -x -o a WORK=C:\DOCUME~1\brainman\LOCALS~1\Temp\go-build219604731 mkdir -p $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\ mkdir -p $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\exe\ cd c:\tmp\bbbb\src\bitbucket.org\mikaelbe\sotest\src\sotest c:\go\root\pkg\tool\windows_386\cgo.exe -objdir $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\ -- -I $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\main.go c:\go\root\pkg\tool\windows_386\8c.exe -F -V -w -I $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\ -I c:\go\root\pkg\windows_386 -o $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_defun.8 -D GOOS_windows -D GOARCH_386 $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_defun.c gcc -I . -g -O2 -m32 -mthreads -print-libgcc-file-name gcc -I . -g -O2 -m32 -mthreads -I $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\ -o $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_main.o -c $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_main.c gcc -I . -g -O2 -m32 -mthreads -I $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\ -o $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_export.o -c $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_export.c gcc -I . -g -O2 -m32 -mthreads -I $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\ -o $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\main.cgo2.o -c $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\main.cgo2.c gcc -I . -g -O2 -m32 -mthreads -o $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_.o $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_main.o $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\_cgo_export.o $WORK\bitbucket.org\mikaelbe\sotest\src\sotest\_obj\main.cgo2.o libc_urg.so -lm -lwinmm # bitbucket.org/mikaelbe/sotest/src/sotest libc_urg.so: file not recognized: File format not recognized collect2: ld returned 1 exit status I don't know much about .so files. Leaving for others. Alex |
Possible fix at https://golang.org/cl/8715043 . Owner changed to @ianlancetaylor. Status changed to Started. |
@mikaelbrg, please also try this https://golang.org/issue/5273?c=12 suggestion in addition to Ian's change. Thank you. Alex |
This issue was updated by revision 9ca4a25. Update issue #5273 R=minux.ma, r CC=golang-dev https://golang.org/cl/8715043 |
Updated to go version devel +b141b8379367 Mon Apr 15 14:06:41 2013 -0700 windows/amd64. Now I get a new error: mikaelbe@ITK-D727 ~/work/sotest (master) $ go build sotest # sotest C:\gotip\pkg\tool\windows_amd64\6l.exe: internal fatal error. Then updated back to go1.0.3 and confirmed that it was still working there. @alex.brainman, not sure how to apply this suggestion as I use a so-file, not dll (not exactly an expert at this). My LDFLAGS looks like this: #cgo LDFLAGS: libc_urg.so -lm -lwinmm Build with -x flag, results in 6l.exe internal fatal error: mikaelbe@ITK-D727 ~/work/sotest (master) $ go build -x sotest WORK=C:\Users\mikaelbe\AppData\Local\Temp\go-build698711863 mkdir -p $WORK\sotest\_obj\ mkdir -p $WORK\sotest\_obj\exe\ cd C:\Users\mikaelbe\work\sotest\src\sotest "C:\\gotip\\pkg\\tool\\windows_amd64\\cgo.exe" -objdir "C:\\Users\\mikaelbe\\App Data\\Local\\Temp\\go-build698711863\\sotest\\_obj\\" -- -I "C:\\Users\\mikaelbe \\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\" main.go "C:\\gotip\\pkg\\tool\\windows_amd64\\6c.exe" -F -V -w -I "C:\\Users\\mikaelbe\\ AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\" -I "C:\\gotip\\pkg\\win dows_amd64" -o "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\so test\\_obj\\_cgo_defun.6" -D GOOS_windows -D GOARCH_amd64 "C:\\Users\\mikaelbe\\ AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\_cgo_defun.c" gcc -I "C:\\Users\\mikaelbe\\work\\sotest\\src\\sotest" -g -O2 -m64 -mthreads -p rint-libgcc-file-name gcc -I "C:\\Users\\mikaelbe\\work\\sotest\\src\\sotest" -g -O2 -m64 -mthreads -I "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\" -o "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\ _cgo_main.o" -c "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\s otest\\_obj\\_cgo_main.c" gcc -I "C:\\Users\\mikaelbe\\work\\sotest\\src\\sotest" -g -O2 -m64 -mthreads -I "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\" -o "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\ _cgo_export.o" -c "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\ \sotest\\_obj\\_cgo_export.c" gcc -I "C:\\Users\\mikaelbe\\work\\sotest\\src\\sotest" -g -O2 -m64 -mthreads -I "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\" -o "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\ main.cgo2.o" -c "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\s otest\\_obj\\main.cgo2.c" gcc -I "C:\\Users\\mikaelbe\\work\\sotest\\src\\sotest" -g -O2 -m64 -mthreads -o "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\_c go_.o" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_o bj\\_cgo_main.o" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\ sotest\\_obj\\_cgo_export.o" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-buil d698711863\\sotest\\_obj\\main.cgo2.o" libc_urg.so -lm -lwinmm "C:\\gotip\\pkg\\tool\\windows_amd64\\cgo.exe" -objdir "C:\\Users\\mikaelbe\\App Data\\Local\\Temp\\go-build698711863\\sotest\\_obj\\" -dynimport "C:\\Users\\mik aelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\_cgo_.o" -dynout " C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\_cgo _import.c" "C:\\gotip\\pkg\\tool\\windows_amd64\\6c.exe" -F -V -w -I "C:\\Users\\mikaelbe\\ AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\" -I "C:\\gotip\\pkg\\win dows_amd64" -o "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\so test\\_obj\\_cgo_import.6" -D GOOS_windows -D GOARCH_amd64 "C:\\Users\\mikaelbe\ \AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\_cgo_import.c" gcc -I "C:\\Users\\mikaelbe\\work\\sotest\\src\\sotest" -g -O2 -m64 -mthreads -o "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\_a ll.o" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\sotest\\_ob j\\_cgo_export.o" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\ \sotest\\_obj\\main.cgo2.o" libc_urg.so -Wl,-r -nostdlib -lmingwex -lmingw32 c:/ mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.3/libgcc.a "C:\\gotip\\pkg\\tool\\windows_amd64\\6g.exe" -o "C:\\Users\\mikaelbe\\AppData\\ Local\\Temp\\go-build698711863\\sotest\\_obj\\_go_.6" -p sotest -D _/C_/Users/mi kaelbe/work/sotest/src/sotest -I "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go- build698711863" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-build698711863\\s otest\\_obj\\_cgo_gotypes.go" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-bui ld698711863\\sotest\\_obj\\main.cgo1.go" "C:\\gotip\\pkg\\tool\\windows_amd64\\pack.exe" grcP "C:\\Users\\mikaelbe\\AppDa ta\\Local\\Temp\\go-build698711863" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\ go-build698711863\\sotest.a" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go-buil d698711863\\sotest\\_obj\\_go_.6" "C:\\Users\\mikaelbe\\AppData\\Local\\Temp\\go -build698711863\\sotest\\_obj\\_cgo_import.6" "C:\\Users\\mikaelbe\\AppData\\Loc al\\Temp\\go-build698711863\\sotest\\_obj\\_cgo_defun.6" "C:\\Users\\mikaelbe\\A ppData\\Local\\Temp\\go-build698711863\\sotest\\_obj\\_all.o" cd . "C:\\gotip\\pkg\\tool\\windows_amd64\\6l.exe" -o "C:\\Users\\mikaelbe\\AppData\\ Local\\Temp\\go-build698711863\\sotest\\_obj\\exe\\a.out.exe" -L "C:\\Users\\mik aelbe\\AppData\\Local\\Temp\\go-build698711863" "C:\\Users\\mikaelbe\\AppData\\L ocal\\Temp\\go-build698711863\\sotest.a" # sotest C:\gotip\pkg\tool\windows_amd64\6l.exe: internal fatal error. Mikael |
ian, unfortunately https://golang.org/cl/8715043 is no good. "internal fatal error" is displayed by our exception handler. When running in gdb, I get: Program received signal SIGSEGV, Segmentation fault. 0x0000000000410ca7 in readsym (obj=obj@entry=0x1fc2f40, i=i@entry=44, y=y@entry=0x22fc88) at c:\mingw64\go\src\cmd\6l\..\ld\ldpe.c:445 445 name = obj->sect[sym->sectnum-1].sym->name; (gdb) p sym $1 = (PeSym *) 0x1fc3a98 (gdb) p sym->sectnum $2 = 13 (gdb) p sym->sectnum-1 $3 = 12 (gdb) p obj $4 = (PeObj *) 0x1fc2f40 (gdb) p obj->sect $5 = (PeSect *) 0x1fc2f90 (gdb) p obj->sect[12] $6 = {name = 0x1fc3310 ".idata$5", base = 0x0, size = 16, sym = 0x0, sh = { Name = ".idata$5", VirtualSize = 0, VirtualAddress = 0, SizeOfRawData = 16, PointerToRawData = 3791, PointerToRelocations = 4116, PointerToLineNumbers = 0, NumberOfRelocations = 1, NumberOfLineNumbers = 0, Characteristics = 3224371200}} (gdb) so we cannot just ignore sections. I am not sure what correct fix is, but I will look further when I have time. Alex |
Similar to https://golang.org/issue/5273, the example works fine until: changeset: 13896:5334356f42b3 user: Shenghou Ma <[email protected]> date: Fri Aug 17 03:42:34 2012 +0800 summary: cmd/go: new cgo build procedure and is broken since. Alex |
mikaelbrg, please try https://golang.org/cl/8676050/ Thank you. Alex |
Alex, https://golang.org/cl/8676050/ allows my project to be built (sotest, bitbucket link in original report), but it fails at runtime. This is what happens at tip with your patch: mikaelbe@ITK-D727 ~/work/sotest (master) $ go version go version devel +13e00572ed0b Thu Apr 18 17:37:21 2013 -0700 windows/amd64 mikaelbe@ITK-D727 ~/work/sotest (master) $ go build sotest mikaelbe@ITK-D727 ~/work/sotest (master) $ sotest unexpected fault address 0x46e3d3 fatal error: fault [signal 0xc0000005 code=0x1 addr=0x46e3d3 pc=0x351eb0] goroutine 1 [syscall]: [fp=0x351e50] return() c:/gotip/src/pkg/runtime/asm_amd64.s:508 [fp=0x351e98] runtime.cgocall(0x46e3d3, 0x351eb0) c:/gotip/src/pkg/runtime/cgocall.c:162 +0x133 [fp=0x351eb0] main._Cfunc_urg_connect(0xc200050000, 0x5d7140, 0x1c200, 0x46e3d3) C:/Users/mikaelbe/AppData/Local/Temp/go-build753753471/sotest/_obj/_cgo_ defun.c:46 +0x32 [fp=0x351ef0] main.(*Urg).Connect(0xc200000038, 0xc200050000, 0x1) C:/Users/mikaelbe/AppData/Local/Temp/go-build753753471/sotest/_obj/_cgo_ gotypes.go:147 +0x58 [fp=0x351f90] main.main() C:/Users/mikaelbe/AppData/Local/Temp/go-build753753471/sotest/_obj/_cgo_ gotypes.go:161 +0x5c [fp=0x351fb8] runtime.main() c:/gotip/src/pkg/runtime/proc.c:182 +0x99 [fp=0x351fc0] runtime.goexit() c:/gotip/src/pkg/runtime/proc.c:1223 goroutine 2 [syscall]: This is what happens with Go1.0.3: mikaelbe@ITK-D727 ~/work/sotest (master) $ go version go version go1.0.3 mikaelbe@ITK-D727 ~/work/sotest (master) $ go build sotest mikaelbe@ITK-D727 ~/work/sotest (master) $ sotest open failed: COM7 Connection error. (Connection fails because hardware is not present, but the program behaves nicely). |
This issue was updated by revision 782a578. R=golang-dev, r, iant CC=golang-dev https://golang.org/cl/8676050 |
@minux, The source code is available at http://www.hokuyo-aut.jp/02sensor/07scanner/download/urg_programs_en/ It is build with: ./configure --prefix=/mingw64 LDFLAGS=-lwinmm make make install If used at that time, I get "not defined"-errors for all the C functions when I build the Go project. I then proceeded to make the SO-file like this: gcc -o libc_urg.so -shared -u urg_connect libc_urg.a libc_urg_system.a libc_urg_connection.a -lwinmm Mikael |
Update: I seem to have got it to work by linking to the .a-files, like this: // #cgo LDFLAGS: /MinGW/mingw64/lib/libc_urg.a /MinGW/mingw64/lib/libc_urg_connection.a /MinGW/mingw64/lib/libc_urg_system.a -lm -lwinmm I don't know if this is what I should have done to begin with, or if this is a hack. Either way, the project builds without errors, and seems to work when running the executable. If I have wasted your time, I'm sorry for that. However, my previous strategy worked for go1.0.3. Mikael |
The immediate problem has been worked around. The long term fix is to implement external linking for Windows. I don't know if there is any reasonable fix short of that. Status changed to Duplicate. Merged into issue #4069. |
This issue was closed.
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
by mikaelbrg:
The text was updated successfully, but these errors were encountered: