Skip to content

cmd/cgo: undefined reference when linking a C-library with gccgo #7573

Closed
@gopherbot

Description

@gopherbot

by fredrik.pettersson.89:

What does 'go version' print?

$ go version
go version devel +06f148a92fbb Tue Mar 18 16:26:23 2014 +1100 linux/amd64

gccgo version:

$ gccgo -v
Using built-in specs.
COLLECT_GCC=gccgo
COLLECT_LTO_WRAPPER=/opt/gccgo/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc/configure --prefix=/opt/gccgo --enable-languages=c,c++,go
Thread model: posix
gcc version 4.9.0 20140307 (experimental) (GCC)

What steps reproduce the problem?
If possible, include a link to a program on play.golang.org.

1. The directory structure is:

$ tree cfuncer ccombo
cfuncer
├── inc
│   └── cfuncer.h
├── libcfuncer.a
└── src
    └── cfuncer.c
ccombo
└── ccombo.go

cfuncer.h
http://play.golang.org/p/dyDC_qFTph

cfuncer.c
http://play.golang.org/p/BIVXB0wZjg

ccombo.go
http://play.golang.org/p/h9cXKM6WzG

2. C-library compilation:

$ cd cfuncer
$ gcc -I inc -Wall -c cfuncer.c
$ ar cruv libcfuncer.a cfuncer.o

3. ccombo.go compilation:

$ cd ../ccombo
$ go build -compiler=gccgo ccombo.go

What happened?

It produces the output: 

# command-line-arguments
/tmp/go-build736128395/command-line-arguments/_obj/ccombo.cgo2.o: In function
`_cgo_ec8ce97ff4d4_Cfunc_cfunction':
ccombo.cgo2.c:(.text+0x3): undefined reference to `cfunction'
collect2: error: ld returned 1 exit status

What should have happened instead?

There should be no output, instead a binary should be created.

Please provide any additional information below.

$ go build -x -compiler=gccgo ccombo.go
WORK=/tmp/go-build814662068
mkdir -p $WORK/command-line-arguments/_obj/
cd /home/fredpe/src/goprogs/src/ccombo
/home/fredpe/src/go/pkg/tool/linux_amd64/cgo -objdir $WORK/command-line-arguments/_obj/
-gccgo -- -I $WORK/command-line-arguments/_obj/ -I ../cfunker/inc/ ccombo.go
gcc -Wall -g -I $WORK/command-line-arguments/_obj/ -I
/home/fredpe/src/go/pkg/linux_amd64 -o $WORK/command-line-arguments/_obj/_cgo_defun.o -D
GOOS_linux -D GOARCH_amd64 -m64 -c $WORK/command-line-arguments/_obj/_cgo_defun.c
gcc -I . -fPIC -m64 -pthread -fmessage-length=0 -print-libgcc-file-name
gcc -I . -fPIC -m64 -pthread -fmessage-length=0 -I $WORK/command-line-arguments/_obj/ -g
-O2 -I ../cfunker/inc/ -o $WORK/command-line-arguments/_obj/_cgo_main.o -c
$WORK/command-line-arguments/_obj/_cgo_main.c
gcc -I . -fPIC -m64 -pthread -fmessage-length=0 -I $WORK/command-line-arguments/_obj/ -g
-O2 -I ../cfunker/inc/ -o $WORK/command-line-arguments/_obj/_cgo_export.o -c
$WORK/command-line-arguments/_obj/_cgo_export.c
gcc -I . -fPIC -m64 -pthread -fmessage-length=0 -I $WORK/command-line-arguments/_obj/ -g
-O2 -I ../cfunker/inc/ -o $WORK/command-line-arguments/_obj/ccombo.cgo2.o -c
$WORK/command-line-arguments/_obj/ccombo.cgo2.c
gcc -I . -fPIC -m64 -pthread -fmessage-length=0 -o
$WORK/command-line-arguments/_obj/_cgo_.o $WORK/command-line-arguments/_obj/_cgo_main.o
$WORK/command-line-arguments/_obj/_cgo_export.o
$WORK/command-line-arguments/_obj/ccombo.cgo2.o -g -O2 -L ../cfunker/ -lcfunker
gccgo -I $WORK -c -g -m64 -fgo-relative-import-path=_/home/fredpe/src/goprogs/src/ccombo
-o $WORK/command-line-arguments/_obj/main.o
$WORK/command-line-arguments/_obj/_cgo_gotypes.go
$WORK/command-line-arguments/_obj/ccombo.cgo1.go
ar cru $WORK/libcommand-line-arguments.a $WORK/command-line-arguments/_obj/main.o
$WORK/command-line-arguments/_obj/_cgo_defun.o
$WORK/command-line-arguments/_obj/_cgo_export.o
$WORK/command-line-arguments/_obj/ccombo.cgo2.o
cd .
gccgo -o ccombo $WORK/command-line-arguments/_obj/main.o
$WORK/command-line-arguments/_obj/_cgo_defun.o
$WORK/command-line-arguments/_obj/_cgo_export.o
$WORK/command-line-arguments/_obj/ccombo.cgo2.o -Wl,-( -m64 -lpthread -Wl,-E -Wl,-)
# command-line-arguments
/tmp/go-build814662068/command-line-arguments/_obj/ccombo.cgo2.o: In function
`_cgo_ec8ce97ff4d4_Cfunc_cfunction':
ccombo.cgo2.c:(.text+0x3): undefined reference to `cfunction'
collect2: error: ld returned 1 exit status

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions