On Wed, Sep 8, 2021 at 4:19 AM Thor Odinson <thorodinsoraven...@gmail.com> wrote: > > I'm bit confused with this, > > The normal way to handle this is to > > use -buildmode=c-archve, which produces an object that the clang > > linker does understand; however, as you noted, that assumes that the > > Go code will be linked with C code and more generally with the C > > library, which I guess you don't want to do. > > Command used to build archive: > CC=clang go build -buildmode=c-archive -o main.a main.go > > I have tried with buildmode=c-archive and linking with C library only using > clang toolchain. > > Command used: > clang test-go.c main.a -lpthread > > But, I'm getting undefined symbols from gcc_*: > > ld: error: undefined symbol: stderr > >>> referenced by gcc_libinit.c:29 > >>> 000006.o:(x_cgo_sys_thread_create) in archive main.a > >>> referenced by gcc_fatalf.c:17 > >>> 000005.o:(fatalf) in archive main.a > >>> referenced by gcc_util.c:18 > >>> 000012.o:(x_cgo_thread_start) in archive main.a > > ld: error: undefined symbol: __errno_location > >>> referenced by gcc_linux_amd64.c:43 > >>> 000007.o:(x_cgo_init) in archive main.a > >>> referenced by gcc_mmap.c:23 > >>> 000008.o:(x_cgo_mmap) in archive main.a > >>> referenced by gcc_sigaction.c:62 > >>> 000010.o:(x_cgo_sigaction) in archive main.a > clang: error: linker command failed with exit code 1 (use -v to see > invocation) > > Is it possible to compile the Go runtime without glibc dependency so I can > use the archive with clang toolchain without relying on gcc toolchain/glibc ?
Using -buildmode=c-archive implies a dependency on glibc. Does it help if you use the -pthread option with clang? You should use that option in any case. Ian > On Wednesday, 8 September 2021 at 01:19:50 UTC+5:30 Ian Lance Taylor wrote: >> >> On Tue, Sep 7, 2021 at 9:25 AM Thor Odinson >> <thorodins...@gmail.com> wrote: >> > >> > I've built an executable file using Go compiler, but the target >> > environments loader expects the program sections to be in specific order >> > and fails to execute. >> > >> > As a result, I'm trying to compile the Go source using 'go tool compile' >> > to generate object files, which I want to link using the clang linker >> > option instead of 'go tool link'. >> > >> > Tried building a archive/shared library using go buildmode option, but >> > this includes lot of Go runtime in the built library. If I have to link >> > this library along with other libraries using clang toolchain, this would >> > not resolve the symbols as the statically built library (built using >> > buildmode) has glibc dependency. >> > >> > " >> > /usr/lib/llvm-5.0/bin/ld.lld: error: undefined symbol: stderr >> > >>> referenced by gcc_libinit.c:29 >> > >>> 000006.o:(x_cgo_sys_thread_create) in archive ./sdlgotest.a >> > " >> > >> > Is there a way to build Go runtime without glibc symbols, so that I can >> > use the archive without relying on gcc toolchain ? >> >> I'm not aware of any way to do that. >> >> The Go compiler generates a Go-specific object file format, which the >> clang linker does not understand. The normal way to handle this is to >> use -buildmode=c-archve, which produces an object that the clang >> linker does understand; however, as you noted, that assumes that the >> Go code will be linked with C code and more generally with the C >> library, which I guess you don't want to do. >> >> I'm a bit surprised that the ordinary "go build" output doesn't work >> for you, as the order of sections is the default one. What section >> ordering do you need? >> >> Ian > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/984ec245-11a3-41b9-a362-a899d75d5e74n%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUuEeSusHyXX0dK%3Dw%2BuUrCRxV6TQ6Hb4jG1z3P%2BJT1Frg%40mail.gmail.com.