Skip to content
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

runtime/race: __acrt_iob_func not defined building with -race on Windows #23649

Open
mattn opened this issue Feb 1, 2018 · 34 comments

Comments

@mattn
Copy link
Member

commented Feb 1, 2018

What version of Go are you using (go version)?

go version devel +6f37fee354 Wed Jan 31 22:12:10 2018 +0000 windows/amd64

Does this issue reproduce with the latest release?

No, maybe something wrong in recent commits.

What operating system and processor architecture are you using (go env)?

set GOARCH=amd64
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows

What did you do?

go test -race

What did you expect to see?

works

What did you see instead?

failed with following errors

runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
@ianlancetaylor

This comment has been minimized.

Copy link
Contributor

commented Feb 1, 2018

In which directory are you running go test -race?

@mattn

This comment has been minimized.

Copy link
Member Author

commented Feb 1, 2018

@ianlancetaylor anywhere can be possible.

$ mkdir %GOPATH%\src\github.com\mattn\foo
$ cd %GOPATH%\src\github.com\mattn\foo
$ cat > foo_test.go
package foo

import (
	"testing"
)

func TestSimple(t *testing.T) {
	got := 1
	want := 2
	if got != want {
		t.Fatalf("want %v, but %v:", want, got)
	}
}
^Z
$ go test -race
# github.com/mattn/foo (testmain)
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
FAIL    github.com/mattn/foo [build failed]
@ianlancetaylor

This comment has been minimized.

Copy link
Contributor

commented Feb 1, 2018

Can you show us the output of go test -race -x?

The references may possibly be coming from runtime/race/race_windows_amd64.syso.

@mattn

This comment has been minimized.

Copy link
Member Author

commented Feb 1, 2018

WORK=C:\Users\mattn\AppData\Local\Temp\go-build145566806
mkdir -p $WORK\b001\
mkdir -p $WORK\b052\
cat >$WORK\b052\vet.cfg << 'EOF' # internal
{
	"Compiler": "gc",
	"Dir": "c:\\dev\\go\\src\\github.com\\mattn\\foo",
	"GoFiles": [
		"c:\\dev\\go\\src\\github.com\\mattn\\foo\\foo_test.go"
	],
	"ImportMap": {
		"fmt": "fmt",
		"testing": "testing"
	},
	"PackageFile": {
		"fmt": "C:\\Users\\mattn\\AppData\\Local\\go-build\\a3\\a3d8338a2cd5a66b9cd0ce3e19a2ba75cae2365147f3d65e37d2214eda7360a9-d",
		"testing": "C:\\Users\\mattn\\AppData\\Local\\go-build\\ed\\edcf0d2f0bf2ebf41c928d10bebf64e600e87fc72dd897c0951bb13dc86989ea-d"
	},
	"ImportPath": "github.com/mattn/foo",
	"SucceedOnTypecheckFailure": true
}
EOF
cd c:\dev\go\src\github.com\mattn\foo
"C:\\go\\pkg\\tool\\windows_amd64\\vet.exe" -atomic -bool -buildtags -nilfunc -printf "C:\\Users\\mattn\\AppData\\Local\\Temp\\go-build145566806\\b052\\vet.cfg"
cat >$WORK\b001\importcfg.link << 'EOF' # internal
packagefile github.com/mattn/foo (testmain)=C:\Users\mattn\AppData\Local\go-build\a1\a1cd7cb20a5f900d42bb15aed70e97bb42e4421b20bb2ee25b2ecf2e983957db-d
packagefile os=C:\Users\mattn\AppData\Local\go-build\83\837d4b3bdc415f8bcb91dcdabce57fa92c56b9518b71791e700f81d857e79e68-d
packagefile testing=C:\Users\mattn\AppData\Local\go-build\ed\edcf0d2f0bf2ebf41c928d10bebf64e600e87fc72dd897c0951bb13dc86989ea-d
packagefile testing/internal/testdeps=C:\Users\mattn\AppData\Local\go-build\ee\ee6f4653963b6916af2a304b23aac3a17080459df3fecf65dbd96759150078f6-d
packagefile runtime=C:\Users\mattn\AppData\Local\go-build\1e\1e02e966f3220ba3fa509fc0f88a1782dfab120d8d0140405537cbc5857bcd6e-d
packagefile runtime/race=C:\Users\mattn\AppData\Local\go-build\78\78c2b3fc30b8de4bf316f28c8f64417b6add42815c3f9e3e947f80b96e6d6c75-d
packagefile github.com/mattn/foo=C:\Users\mattn\AppData\Local\go-build\68\68f4246cdf49dc4424505adbe919adfcbb58be7b247c5cdbcc666f2c679dbcf2-d
packagefile errors=C:\Users\mattn\AppData\Local\go-build\68\68e3f9c288343074208dc9e0a266346ff7625e552ef829ada893db6628a51f8b-d
packagefile internal/poll=C:\Users\mattn\AppData\Local\go-build\b7\b7daed2c5d1cdfcf9f6480e996b73a0dd4433478e4dc8a4d3c6f747baae8c073-d
packagefile internal/syscall/windows=C:\Users\mattn\AppData\Local\go-build\13\13816b7dc009ed7c1e7274f912134c95e68ba9cc82a7031905c6b8b42c1f2891-d
packagefile internal/testlog=C:\Users\mattn\AppData\Local\go-build\f0\f0da1bc52eda632593bdb6d042a0fcd484fa373f29204ae36d41259241023492-d
packagefile io=C:\Users\mattn\AppData\Local\go-build\ca\ca0ff109878b733122cb5ac2fb576f5d6bb1652a7dde8e765dd65261156554ed-d
packagefile sync=C:\Users\mattn\AppData\Local\go-build\c1\c1ddb79625fec9aa4575933dbd316dba9b27d79555757941ede222d3cc6e4bb2-d
packagefile sync/atomic=C:\Users\mattn\AppData\Local\go-build\29\2937e911eec472bb2123d58af418e2da85468ba6ca3fd0a1533744f690356776-d
packagefile syscall=C:\Users\mattn\AppData\Local\go-build\2c\2c58e945883ab36d2410c5d364a63944cd39f0eaccbcfc4326a7b0778c854327-d
packagefile time=C:\Users\mattn\AppData\Local\go-build\45\4572e703e2c552c5d557caa54079f1f6074f059c277ae6567f51589f20c9643c-d
packagefile unicode/utf16=C:\Users\mattn\AppData\Local\go-build\6a\6a9a0523c33041ad28aa6b951f78b4940445672f274feca8c019afacf0594f16-d
packagefile bytes=C:\Users\mattn\AppData\Local\go-build\d0\d01cb1df3ed8d3f9e49d35230e43dce1ab928560bd37548fd1f859605b690d1b-d
packagefile flag=C:\Users\mattn\AppData\Local\go-build\8e\8e5a9f40700f231986b5fe7827befbc2dc832a33bf954a3555d941dc46370ec3-d
packagefile fmt=C:\Users\mattn\AppData\Local\go-build\a3\a3d8338a2cd5a66b9cd0ce3e19a2ba75cae2365147f3d65e37d2214eda7360a9-d
packagefile internal/race=C:\Users\mattn\AppData\Local\go-build\47\47969aa17e7eb3241750ed30f2cbd2fc100ad3ac7c4af97a47a0d28e678235e1-d
packagefile runtime/debug=C:\Users\mattn\AppData\Local\go-build\63\637b0a90189037487b87f9d8d1ab56aff367e6ef5c5cdf92ce9004551a13d6e8-d
packagefile runtime/trace=C:\Users\mattn\AppData\Local\go-build\cc\cc72603177f7f1a64234e4263075a00cb2a940d9de8ff935aaeee89f9c1a1b9a-d
packagefile sort=C:\Users\mattn\AppData\Local\go-build\7e\7eb34e9c94bb2e5765f2ea39a77592f416a8e5d45f892b7134534cb61d8b0143-d
packagefile strconv=C:\Users\mattn\AppData\Local\go-build\bf\bf8cb0e39b03fa85f5c18875f0f4b8ea940c17a9eb2b367c2d9ec60eb41b9f27-d
packagefile strings=C:\Users\mattn\AppData\Local\go-build\e3\e3921607adc7f7e34c5c3c7885e9e7a8de28dcadce77deae9f362d10ace9fef6-d
packagefile bufio=C:\Users\mattn\AppData\Local\go-build\31\3172eec9b4e15ba9b56253ad8a0bf3de77d3752ae423f552f2bb20f1fb5f0b5c-d
packagefile regexp=C:\Users\mattn\AppData\Local\go-build\9f\9f439c7b8919063d5dd387dca4e3e65a68e9195b8545194868c5bebdec840b1c-d
packagefile runtime/pprof=C:\Users\mattn\AppData\Local\go-build\7e\7eb89538e15c98300ddc1f774643f0610bdb9bcf8e8d4d286ac2b8e81f4b9d2e-d
packagefile runtime/internal/atomic=C:\Users\mattn\AppData\Local\go-build\24\240e5b9c27d638d2e2752efb5ad5aa9bf413d1ef39227bcf81edfc3638f9c69d-d
packagefile runtime/internal/sys=C:\Users\mattn\AppData\Local\go-build\9e\9ecbfdff43cebed79c4d60e65bd9b9fe62eaa357639bdd9e730410b85f69baff-d
packagefile runtime/cgo=C:\Users\mattn\AppData\Local\go-build\a5\a52e8da57055eafee31eb84a4893c9971088b8deaa63de99103f3e100a09ef2a-d
packagefile unicode/utf8=C:\Users\mattn\AppData\Local\go-build\6e\6efff469d5bf5358781c24fec393abd273bc605322f725abc0a581be9676286b-d
packagefile internal/syscall/windows/sysdll=C:\Users\mattn\AppData\Local\go-build\f1\f1b02e75282f68faefcaf8527406783929070b3c6178b7f5813bbf5275dd9818-d
packagefile internal/syscall/windows/registry=C:\Users\mattn\AppData\Local\go-build\45\452267d2da652a5afdf48dc13d2bf4842c63e42cee983833b0d24238f1469652-d
packagefile internal/cpu=C:\Users\mattn\AppData\Local\go-build\08\0820411bd99f23e507e18428a919a89772e24f45fde3993bbde77ddbe64693d2-d
packagefile unicode=C:\Users\mattn\AppData\Local\go-build\da\da22e4a89a2be70ca5572a07cbc04f555592fa5efa1945a5a236f8d16391e52f-d
packagefile reflect=C:\Users\mattn\AppData\Local\go-build\fe\fe0225cad5ff122232f6b54733283073c143e2bb7201c11911fa74afb37773b5-d
packagefile math=C:\Users\mattn\AppData\Local\go-build\54\5477db0575eaad986e6af44a6d92eb5b9b029f68bd2eda1cff695feef78ab65b-d
packagefile regexp/syntax=C:\Users\mattn\AppData\Local\go-build\ff\ff255ed1e973468deb90e18fbb8dfd410cbaedf18f28d5f962ffbf18507593c3-d
packagefile compress/gzip=C:\Users\mattn\AppData\Local\go-build\01\01e494cfaaaf1e74612ca5a553f42b57c7ace529f9014a66fed37ac5795f9cf1-d
packagefile context=C:\Users\mattn\AppData\Local\go-build\f3\f31d3ebc36126e980dda077c1e58e38807ea213eb5f2aeb5660d3bbb7bb0a211-d
packagefile encoding/binary=C:\Users\mattn\AppData\Local\go-build\20\201852e405473d2c0ba6af3f027543b807e62d9a51522011044368906db73cb4-d
packagefile io/ioutil=C:\Users\mattn\AppData\Local\go-build\ed\edbe00c607f78531a963dbe6201f18c2a7b3ccd4b1df109fb352cf03b47435b9-d
packagefile text/tabwriter=C:\Users\mattn\AppData\Local\go-build\63\63adbe090316bef2abadb405f567ad610d9b67394b9c759c84ba1d835e5bf6e1-d
packagefile compress/flate=C:\Users\mattn\AppData\Local\go-build\15\154623f1674dd99d895f1da69c50f27258b7a12ac729ae26182ad1b378eeaaad-d
packagefile hash/crc32=C:\Users\mattn\AppData\Local\go-build\ce\cead5fd22d068fcf09b8e5243bc51760a843e6bdcb21bb4ad0d5850b9748135b-d
packagefile path/filepath=C:\Users\mattn\AppData\Local\go-build\74\745eee1f96c076cc9d5022442547312bc1b877ceb2dbdab11fe92a062c4196d9-d
packagefile math/bits=C:\Users\mattn\AppData\Local\go-build\44\44634ab159fd5fc49a33bfc094c9913922a2aa5d82551333f71c01daac982955-d
packagefile hash=C:\Users\mattn\AppData\Local\go-build\7b\7b545474ad2305b77c32f519c4c9d8c4d7e8a6631fdb4e68d36649820e0c0993-d
EOF
cd .
"C:\\go\\pkg\\tool\\windows_amd64\\link.exe" -o "C:\\Users\\mattn\\AppData\\Local\\Temp\\go-build145566806\\b001\\foo.test.exe" -importcfg "C:\\Users\\mattn\\AppData\\Local\\Temp\\go-build145566806\\b001\\importcfg.link" -installsuffix race -s -w -buildmode=exe -buildid=SahtbTegVVJvP74olz_7/8pJx4XviJbtdY1jhw28h/woq27DTbfcLI0z8p91IG/SahtbTegVVJvP74olz_7 -race -extld=gcc "C:\\Users\\mattn\\AppData\\Local\\go-build\\a1\\a1cd7cb20a5f900d42bb15aed70e97bb42e4421b20bb2ee25b2ecf2e983957db-d"
# github.com/mattn/foo (testmain)
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): relocation target __acrt_iob_func not defined
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
runtime/cgo(.text): undefined: "__acrt_iob_func"
rm -r $WORK\b001\
FAIL	github.com/mattn/foo [build failed]
@alexbrainman

This comment has been minimized.

Copy link
Member

commented Feb 4, 2018

@mattn are you sure?

I cannot reproduce this:

c:\Users\Alex\dev\src\issue\go\23649>type foo_test.go
package foo

import (
        "testing"
)

func TestSimple(t *testing.T) {
        got := 1
        want := 2
        if got != want {
                t.Fatalf("want %v, but %v:", want, got)
        }
}

c:\Users\Alex\dev\src\issue\go\23649>go version
go version devel +6f37fee354 Wed Jan 31 22:12:10 2018 +0000 windows/amd64

c:\Users\Alex\dev\src\issue\go\23649>go test -race
--- FAIL: TestSimple (0.00s)
        foo_test.go:11: want 2, but 1:
FAIL
exit status 1
FAIL    issue/go/23649  0.052s

c:\Users\Alex\dev\src\issue\go\23649>

Alex

@mattn

This comment has been minimized.

Copy link
Member Author

commented Feb 4, 2018

Yes, I found this on my Windows7. Now I'm on Windows10 and reproduce this. This is gcc version I use.

gcc (Rev1, Built by MSYS2 project) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@mattn

This comment has been minimized.

Copy link
Member Author

commented Feb 5, 2018

If I put following code on same directory, go test -race works fine.

package foo

//
import "C"
@alexbrainman

This comment has been minimized.

Copy link
Member

commented Feb 11, 2018

gcc (Rev1, Built by MSYS2 project) 7.3.0

The latest of gcc I have is version 5. How do I install 7.3.0 ?

Thank you

Alex

@mattn

This comment has been minimized.

Copy link
Member Author

commented Feb 14, 2018

I installed gcc 7.3.0 from https://github.com/Alexpux/MINGW-packages

Yesterday, I updated mingw gcc using pacman command. And it seems that this problem disappears. I apologize for bothering you

@mattn mattn closed this Feb 14, 2018

@alexbrainman

This comment has been minimized.

Copy link
Member

commented Feb 14, 2018

Yesterday, I updated mingw gcc using pacman command. And it seems that this problem disappears. I apologize for bothering you

No worries. All is good.

Alex

@mattn

This comment has been minimized.

Copy link
Member Author

commented Feb 17, 2018

I could reproduce this on my Windows 10. So I reopen this.

@mattn mattn reopened this Feb 17, 2018

@mattn

This comment has been minimized.

Copy link
Member Author

commented Feb 17, 2018

@mattn

This comment has been minimized.

Copy link
Member Author

commented Feb 19, 2018

libgcc.a (which is placed at pointed by gcc --print-libgcc-file-name command) seems not include symbol __acrt_iob_func. It seems to be contained in libmsvcrt.a. But even if I patched below, duplicated symbol error occured then.

diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
index bfff5209a6..9f18cfac50 100644
--- a/src/cmd/link/internal/ld/lib.go
+++ b/src/cmd/link/internal/ld/lib.go
@@ -528,6 +528,9 @@ func (ctxt *Link) loadlib() {
 				if p := ctxt.findLibPath("libmingw32.a"); p != "none" {
 					hostArchive(ctxt, p)
 				}
+				if p := ctxt.findLibPath("libmsvcrt.a"); p != "none" {
+					hostArchive(ctxt, p)
+				}
 				// TODO: maybe do something similar to peimporteddlls to collect all lib names
 				// and try link them all to final exe just like libmingwex.a and libmingw32.a:
 				/*

Any idea to fix this?

@ajaychk

This comment has been minimized.

Copy link

commented May 25, 2018

facing same issue
➜ dddgit:(bolt) ✗ env GOOS=linux go build . runtime/cgo(__TEXT/__text): relocation target x_cgo_inittls not defined runtime/cgo(__TEXT/__text): relocation target x_cgo_threadentry not defined runtime/cgo(__TEXT/__text): undefined: "x_cgo_inittls" runtime/cgo(__TEXT/__text): undefined: "x_cgo_threadentry"

@ianlancetaylor ianlancetaylor changed the title runtime/cgo(.text): relocation target __acrt_iob_func not defined runtime/cgo: relocation target __acrt_iob_func not defined Jun 28, 2018

@ianlancetaylor ianlancetaylor modified the milestones: Go1.11, Go1.12 Jun 28, 2018

@ajruckman

This comment has been minimized.

Copy link

commented Jul 19, 2018

I have the same issue. If it helps to have more logs, here are mine.

This is the version of MinGW I am using on Windows 10.

@mattn

This comment has been minimized.

Copy link
Member Author

commented Jul 19, 2018

Workaround for this, try to add -ldflags="-linkmode=external" for build.

@incapable

This comment has been minimized.

Copy link

commented Jul 23, 2018

Can confirm this as well on windows 10, go 1.10.3 and gcc 8.1.0 x86_64

@Grehgous

This comment has been minimized.

Copy link

commented Aug 20, 2018

Having the same issue. @mattn 's workaround did not work for me.

Windows 10
mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0
go version go1.10.3 windows/amd64

bpicode added a commit to bpicode/fritzctl that referenced this issue Sep 4, 2018
gbrlsnchs pushed a commit to gbrlsnchs/jwt that referenced this issue Sep 14, 2018
Gabriel Sanches
Add ldflags flag to test on AppVeyor
This is an attempt to work around golang/go#23649.
bpicode added a commit to bpicode/fritzctl that referenced this issue Sep 16, 2018
@jazzy-crane

This comment has been minimized.

Copy link

commented Sep 26, 2018

Also seeing this. Only effects tests that bring in cgo code

Windows 10
gcc version 8.1.0 (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project)
go version go1.11 windows/amd64

Full GCC version info:

C:\MyGo\src\repo.jazznetworks.com\jazz\main>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-sjlj-rt_v6-rev0/mingw64 --enable-shared --enable-static --enable-targets=all --enable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --enable-sjlj-exceptions --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch-32=i686 --with-arch-64=nocona --with-tune-32=generic --with-tune-64=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-sjlj-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-sjlj-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-sjlj-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-sjlj-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-sjlj-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
Thread model: posix
gcc version 8.1.0 (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project)
@jazzy-crane

This comment has been minimized.

Copy link

commented Sep 26, 2018

I've enclosed objdump -tr for mingw32.a and mingwew.a , not sure if thats useful?:
libmingw32.txt
libmingwex.txt

@ianlancetaylor ianlancetaylor changed the title runtime/cgo: relocation target __acrt_iob_func not defined runtime/race: __acrt_iob_func not defined building with -race on Windows Nov 28, 2018

@ianlancetaylor ianlancetaylor modified the milestones: Go1.12, Unplanned Nov 28, 2018

@ianlancetaylor

This comment has been minimized.

Copy link
Contributor

commented Nov 28, 2018

@elagergren-spideroak

This comment has been minimized.

Copy link

commented Jan 25, 2019

Not an entirely new data point, but, on Windows 7 with Go 1.11.4.

# uname -a
MINGW64_NT-6.1 WIN-2R64B2Q8DUG 2.11.2(0.329/5/3) 2018-11-26 09:22 x86_64 Msys

# gcc --version
gcc.exe (Rev1, Built by MSYS2 project) 8.2.1 20181214
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

AFAICT, I only get it when not importing "C".

@alexbrainman

This comment has been minimized.

Copy link
Member

commented Mar 3, 2019

I just downloaded x86_64-7.3.0-release-win32-seh-rt_v5-rev0.7z file from https://sourceforge.net/projects/mingw-w64/files/

The file contains

c:\>gcc --version
gcc (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


c:\>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/users/alex/dev/x86_64-7.3.0-release-win32-seh-rt_v5-rev0/bin/../libexec/gcc/x86_64-w64-mingw32/7.3.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-7.3.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw730/x86_64-730-win32-seh-rt_v5-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=win32 --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --enable-libstdcxx-filesystem-ts=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw730/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw730/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw730/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw730/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-win32-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw730/x86_64-730-win32-seh-rt_v5-rev0/mingw64/opt/include -I/c/mingw730/prerequisites/x86_64-zlib-static/include -I/c/mingw730/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw730/x86_64-730-win32-seh-rt_v5-rev0/mingw64/opt/include -I/c/mingw730/prerequisites/x86_64-zlib-static/include -I/c/mingw730/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw730/x86_64-730-win32-seh-rt_v5-rev0/mingw64/opt/include -I/c/mingw730/prerequisites/x86_64-zlib-static/include -I/c/mingw730/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw730/x86_64-730-win32-seh-rt_v5-rev0/mingw64/opt/lib -L/c/mingw730/prerequisites/x86_64-zlib-static/lib -L/c/mingw730/prerequisites/x86_64-w64-mingw32-static/lib '
Thread model: win32
gcc version 7.3.0 (x86_64-win32-seh-rev0, Built by MinGW-W64 project)

c:\>

Seems to be working fine for me

c:\>go version
go version devel +249f5d2af4 Fri Mar 1 23:14:39 2019 +0000 windows/amd64

c:\>go test -race -count=1 path/filepath
ok      path/filepath   1.983s

c:\>

Alex

@mattn

This comment has been minimized.

Copy link
Member Author

commented Mar 3, 2019

mingw64 compiler bundled on msys2

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.1/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-8-20181214/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64 --with-tune=generic --enable-languages=ada,c,lto,c++,objc,obj-c++,fortran --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev1, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
Thread model: posix
gcc version 8.2.1 20181214 (Rev1, Built by MSYS2 project) 
runtime/cgo(.text): relocation target __acrt_iob_func not defined for ABI0 (but is defined for ABI0)
runtime/cgo(.text): relocation target __acrt_iob_func not defined for ABI0 (but is defined for ABI0)
runtime/cgo(.text): relocation target __acrt_iob_func not defined for ABI0 (but is defined for ABI0)
FAIL	github.com/mattn/go-sandbox/race [build failed]
@alexbrainman

This comment has been minimized.

Copy link
Member

commented Mar 3, 2019

Thread model: posix

Hey! I know nothing about GCC. But mine has

Thread model: win32

Try find GCC similar to mine. Or download one from https://sourceforge.net/projects/mingw-w64/files/

See, if it works.

Alex

@alexbrainman

This comment has been minimized.

Copy link
Member

commented Apr 28, 2019

@mattn I managed to reproduce your problem, if I use internal linker:

c:\>go version
go version devel +2177bfb343 Fri Apr 26 21:54:41 2019 +0000 windows/amd64

c:\>gcc --version
gcc (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


c:\>go test -short debug/pe
--- FAIL: TestInternalLinkerDWARF (1.25s)
    file_test.go:356: building test executable for linktype 2 failed: exit status 2 # command-line-arguments
        runtime/cgo(.text): relocation target __acrt_iob_func not defined for ABI0 (but is defined for ABI0)
        runtime/cgo(.text): relocation target __acrt_iob_func not defined for ABI0 (but is defined for ABI0)
        runtime/cgo(.text): relocation target __acrt_iob_func not defined for ABI0 (but is defined for ABI0)
FAIL
FAIL    debug/pe        6.120s

c:\>

Alex

@jakirkham

This comment has been minimized.

Copy link

commented May 16, 2019

Ran into this issue recently when trying to build gdrive on Linux. Here's the build script that was used and the log. Was only able to fix it with @mattn's workaround above.

Edited: To provide more stable links to these artifacts.

@jakirkham jakirkham referenced this issue May 16, 2019
5 of 5 tasks complete
@stuarteberg stuarteberg referenced this issue Jul 1, 2019
5 of 5 tasks complete
@TriAnMan

This comment has been minimized.

Copy link

commented Aug 6, 2019

I reproduce this error every time I try debugging a binary with a -race argument for go tool in the GoLand IDE.

@mattn

This comment has been minimized.

Copy link
Member Author

commented Aug 8, 2019

libcrtdll.al include symbol of __acrt_iob_func. So I tried to specify -libgcc to libcrtdll.a but new error occured.

HEADER = -H11 -T0xffffffffffffffff -R0xffffffff
c:\msys64\mingw64\x86_64-w64-mingw32\lib\libcrtdll.a(/75): duplicate symbol reference: __acrt_iob_func in both libgcc(.text) and libgcc(.data)
gcc [-m64 --print-file-name=libmingwex.a]
gcc [-m64 --print-file-name=libmingw32.a]
 0.00 deadcode
 0.02 windynrelocsyms
 0.04 pclntab=883521 bytes, funcdata total 205602 bytes
 0.05 dodata
 0.06 reloc
 0.07 asmb
 0.07 codeblk
 0.08 rodatblk
 0.09 datblk
 0.09 headr
 0.09 cpu time
70990 symbols
137048 liveness data

Applying workaround patch to ignore duplicate symbol to link.

diff --git a/src/cmd/link/internal/loadpe/ldpe.go b/src/cmd/link/internal/loadpe/ldpe.go
index f08e1241a7..b02ffd0ceb 100644
--- a/src/cmd/link/internal/loadpe/ldpe.go
+++ b/src/cmd/link/internal/loadpe/ldpe.go
@@ -465,6 +465,7 @@ func readpesym(arch *sys.Arch, syms *sym.Symbols, f *pe.File, pesym *pe.COFFSymb
 		switch pesym.StorageClass {
 		case IMAGE_SYM_CLASS_EXTERNAL: //global
 			s = syms.Lookup(name, 0)
+			s.Attr |= sym.AttrDuplicateOK
 
 		case IMAGE_SYM_CLASS_NULL, IMAGE_SYM_CLASS_STATIC, IMAGE_SYM_CLASS_LABEL:
 			s = syms.Lookup(name, localSymVersion)

And replace libgcc to libcrtdll.a

"C:\go\pkg\tool\windows_amd64\link.exe" -libgcc c:\msys64\mingw64\x86_64-w64-mingw32\lib\libcrtdll.a -v -o race.test.exe -importcfg "C:\Users\mattn\AppData\Local\Temp\go-build513371986\b001\importcfg.link" -installsuffix race -s -w -buildmode=exe -buildid=3esQSTFNwKjQb1FEP_7l/gjURKijru_dPeOTOCljs/eEnc_vxaS0uhL6wLrl5X/3esQSTFNwKjQb1FEP_7l -race -extld=gcc "C:\Users\mattn\AppData\Local\go-build\a0\a0796ee7b6afc644bdeb01ed7dac7357541ae2e2eaf4a534dee5e10f0da662ba-d"

Now I could generate race.test.exe and works correctly. I wonder this information become a hint to solve this issue.

@gopherbot

This comment has been minimized.

Copy link

commented Aug 17, 2019

Change https://golang.org/cl/190481 mentions this issue: cmd/link/internal: ignore duplicate symbols for cgo

@mattn

This comment has been minimized.

Copy link
Member Author

commented Aug 17, 2019

Another solution is removing stderr from runtime/cgo/windows.c

@alexbrainman

This comment has been minimized.

Copy link
Member

commented Aug 18, 2019

Another solution is removing stderr from runtime/cgo/windows.c

I do not understand. What exactly are you proposing? Thank you.

Alex

@mattn

This comment has been minimized.

Copy link
Member Author

commented Aug 18, 2019

stdout/stdin/stderr is macro of __acrt_iob_func. So if remove using them, this error should be removed, I guess.

@alexbrainman

This comment has been minimized.

Copy link
Member

commented Aug 21, 2019

stdout/stdin/stderr is macro of __acrt_iob_func. So if remove using them, this error should be removed

We have no control over what other people do in their C code. They could include whatever headers they need. So this will not work.

Alex

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
You can’t perform that action at this time.