douweida2878 2015-02-15 15:27
浏览 67

gccgo 4.9.2动态链接器错误:未定义对`sync..import'的引用

The source code is

package main
import "fmt"
func main() {
    fmt.Println("hello world")
}

The Object file is built without error

root@OpenWrt:/mnt/sda3# gccgo -v -c hello.go
Using built-in specs.
COLLECT_GCC=gccgo
Target: mipsel-openwrt-linux-gnu
Configured with: /home/michal/Data/openwrt/mt7621/mtk-openwrt-master-eglibc/build_dir/target-mipsel_1004kc+dsp_eglibc-2.19/gcc-4.9.2/configure --target=mipsel-openwrt-linux --host=mipsel-openwrt-linux --build=x86_64-linux-gnu --program-prefix= --program-suffix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls --build=x86_64-linux-gnu --host=mipsel-openwrt-linux-gnu --target=mipsel-openwrt-linux-gnu --enable-languages=c,c++,go --with-bugurl=https://dev.openwrt.org/ --with-pkgversion='OpenWrt GCC 4.9.2' --enable-shared --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls --disable-libmudflap --disable-multilib --disable-libgomp --disable-libquadmath --disable-libssp --disable-decimal-float --disable-libstdcxx-pch --with-host-libstdcxx=-lstdc++ --prefix=/usr --libexecdir=/usr/lib --with-float=soft
Thread model: posix
gcc version 4.9.2 (OpenWrt GCC 4.9.2) 
COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'hello.o' '-shared-libgcc' '-msoft-float' '-mllsc' '-mno-shared'
 /usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/go1 hello.go -quiet -dumpbase hello.go -msoft-float -mllsc -mno-shared -auxbase-strip hello.o -version -L/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2 -L/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/../../.. -o /tmp/ccWiioSJ.s
GNU Go (OpenWrt GCC 4.9.2) version 4.9.2 (mipsel-openwrt-linux-gnu)
        compiled by GNU C version 4.8.3, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=31962
GNU Go (OpenWrt GCC 4.9.2) version 4.9.2 (mipsel-openwrt-linux-gnu)
        compiled by GNU C version 4.8.3, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=31962
COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'hello.o' '-shared-libgcc' '-msoft-float' '-mllsc' '-mno-shared'
 as -v -EL -O1 -no-mdebug -mabi=32 -mno-shared -KPIC -o hello.o /tmp/ccWiioSJ.s
GNU assembler version 2.24 (mipsel-openwrt-linux-gnu) using BFD version (GNU Binutils) 2.24
COMPILER_PATH=/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'hello.o' '-shared-libgcc' '-msoft-float' '-mllsc' '-mno-shared'

But the linker reports an error undefined reference to `sync..import'.

root@OpenWrt:/mnt/sda2# gccgo -v -o hello hello.o
Using built-in specs.
COLLECT_GCC=gccgo
COLLECT_LTO_WRAPPER=/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/lto-wrapper
Target: mipsel-openwrt-linux-gnu
Configured with: /home/michal/Data/openwrt/mt7621/mtk-openwrt-master-eglibc/build_dir/target-mipsel_1004kc+dsp_eglibc-2.19/gcc-4.9.2/configure --target=mipsel-openwrt-linux --host=mipsel-openwrt-linux --build=x86_64-linux-gnu --program-prefix= --program-suffix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls --build=x86_64-linux-gnu --host=mipsel-openwrt-linux-gnu --target=mipsel-openwrt-linux-gnu --enable-languages=c,c++,go --with-bugurl=https://dev.openwrt.org/ --with-pkgversion='OpenWrt GCC 4.9.2' --enable-shared --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls --disable-libmudflap --disable-multilib --disable-libgomp --disable-libquadmath --disable-libssp --disable-decimal-float --disable-libstdcxx-pch --with-host-libstdcxx=-lstdc++ --prefix=/usr --libexecdir=/usr/lib --with-float=soft
Thread model: posix
gcc version 4.9.2 (OpenWrt GCC 4.9.2) 
COMPILER_PATH=/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/:/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'hello' '-shared-libgcc' '-msoft-float' '-mllsc' '-mno-shared'
 /usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/collect2 --eh-frame-hdr -EL -dynamic-linker /lib/ld.so.1 -o hello /usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/crt1.o /usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/crti.o /usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/crtbegin.o -L/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2 -L/usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/../../.. hello.o -lgobegin -lgo -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/crtend.o /usr/lib/gcc/mipsel-openwrt-linux-gnu/4.9.2/crtn.o
hello.o: In function `__go_init_main':
hello.go:(.text+0x16c): undefined reference to `sync..import'
collect2: error: ld returned 1 exit status

What i missed? Thanks for help

I've tried static link the program, add a flag -static-libgo, it works.

  • 写回答

1条回答 默认 最新

  • douhuanchi6586 2015-02-15 16:03
    关注

    Dynamic linking is iffy at best and not all that supported, so take it with a grain of salt.

    That being said, it works for me, so something might be wrong with your gcc and/or libgo setup.

    ➜ gccgo -c hello.go 
    ➜ gccgo -o hello hello.o 
    ➜ ./hello 
    hello world
    ➜ ldd hello
            linux-vdso.so.1 (0x00007fffb831f000)
            libgo.so.5 => /usr/lib/libgo.so.5 (0x00007f214aaba000)
            libm.so.6 => /usr/lib/libm.so.6 (0x00007f214a7b5000)
            libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f214a59f000)
            libc.so.6 => /usr/lib/libc.so.6 (0x00007f214a1fc000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f214b919000)
            libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f2149fdf000)
    ➜ gccgo -v
    Using built-in specs.
    COLLECT_GCC=gccgo
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/lto-wrapper
    Target: x86_64-unknown-linux-gnu
    Configured with: /build/gcc-multilib/src/gcc-4.9-20150204/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-cloog-backend=isl --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-multilib --disable-werror --enable-checking=release
    Thread model: posix
    gcc version 4.9.2 20150204 (prerelease) (GCC)
    

    If you're trying to get a small executable size, look into using upx as a workaround or try to compile gccgo by hand.

    评论

报告相同问题?

悬赏问题

  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制