Link errors - please help

562 views
Skip to first unread message

Nhon Quach

unread,
Feb 18, 2017, 8:34:11 PM2/18/17
to sw-...@groups.riscv.org
Hi,

I am trying to port a C++ program to RISCV. Compilation seemed to have gone well, but I got the following error messages when linking. Any help or pointers will be greatly appreciated.

Thanks,

Nhon


../../bsp/../toolchain/bin/riscv32-unknown-elf-ar rcs libwrap.a ../../bsp/libwrap/stdlib/malloc.o ../../bsp/libwrap/sys/open.o ../../bsp/libwrap/sys/lseek.o ../../bsp/libwrap/sys/read.o ../../bsp/libwrap/sys/write.o ../../bsp/libwrap/sys/fstat.o ../../bsp/libwrap/sys/stat.o ../../bsp/libwrap/sys/close.o ../../bsp/libwrap/sys/link.o ../../bsp/libwrap/sys/unlink.o ../../bsp/libwrap/sys/execve.o ../../bsp/libwrap/sys/fork.o ../../bsp/libwrap/sys/getpid.o ../../bsp/libwrap/sys/kill.o ../../bsp/libwrap/sys/wait.o ../../bsp/libwrap/sys/isatty.o ../../bsp/libwrap/sys/times.o ../../bsp/libwrap/sys/sbrk.o ../../bsp/libwrap/sys/_exit.o ../../bsp/libwrap/misc/write_hex.o
../../bsp/../toolchain/bin/riscv32-unknown-elf-g++ -O2 -fno-builtin-printf -g -I../../bsp/include -I../../bsp/env -I../../bsp/env/freedom-e300-hifive1 ../../bsp/env/start.o ../../bsp/env/entry.o ../../bsp/env/freedom-e300-hifive1/init.o ecg_cnn_test.o ecg_cnn_classification.o ecg_cnn_components.o -o ecg_cnn1_test -Wl,--wrap=malloc -Wl,--wrap=free -Wl,--wrap=open -Wl,--wrap=lseek -Wl,--wrap=read -Wl,--wrap=write -Wl,--wrap=fstat -Wl,--wrap=stat -Wl,--wrap=close -Wl,--wrap=link -Wl,--wrap=unlink -Wl,--wrap=execve -Wl,--wrap=fork -Wl,--wrap=getpid -Wl,--wrap=kill -Wl,--wrap=wait -Wl,--wrap=isatty -Wl,--wrap=times -Wl,--wrap=sbrk -Wl,--wrap=_exit -L. -Wl,--start-group -lwrap -lc -Wl,--end-group -T ../../bsp/env/freedom-e300-hifive1/link.lds -nostartfiles -lstdc++ -L../../bsp/env
/home/nquach/Desktop/freedom-e-sdk/toolchain/lib/gcc/riscv32-unknown-elf/6.1.0/../../../../riscv32-unknown-elf/lib/libstdc++.a(eh_alloc.o): In function `_GLOBAL__sub_I__ZN9__gnu_cxx9__freeresEv':
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/eh_alloc.cc:260: undefined reference to `__wrap_free'
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/eh_alloc.cc:272: undefined reference to `__wrap_malloc'
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/eh_alloc.cc:291: undefined reference to `__wrap_free'
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/eh_alloc.cc:303: undefined reference to `__wrap_malloc'
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/eh_alloc.cc:323: undefined reference to `__wrap_free'
/home/nquach/Desktop/freedom-e-sdk/toolchain/lib/gcc/riscv32-unknown-elf/6.1.0/../../../../riscv32-unknown-elf/lib/libstdc++.a(eh_alloc.o): In function `pool':
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/eh_alloc.cc:123: undefined reference to `__wrap_malloc'
/home/nquach/Desktop/freedom-e-sdk/toolchain/lib/gcc/riscv32-unknown-elf/6.1.0/../../../../riscv32-unknown-elf/lib/libstdc++.a(del_op.o): In function `operator delete(void*)':
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/del_op.cc:49: undefined reference to `__wrap_free'
/home/nquach/Desktop/freedom-e-sdk/toolchain/lib/gcc/riscv32-unknown-elf/6.1.0/../../../../riscv32-unknown-elf/lib/libstdc++.a(new_op.o): In function `operator new(unsigned int)':
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/new_op.cc:50: undefined reference to `__wrap_malloc'
/home/nquach/Desktop/freedom-e-sdk/toolchain/lib/gcc/riscv32-unknown-elf/6.1.0/../../../../riscv32-unknown-elf/lib/libstdc++.a(basic_file.o): In function `xwrite':
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/build-gcc-newlib/riscv32-unknown-elf/libstdc++-v3/src/c++98/basic_file.cc:292: undefined reference to `__wrap_read'
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/build-gcc-newlib/riscv32-unknown-elf/libstdc++-v3/src/c++98/basic_file.cc:327: undefined reference to `__wrap_lseek'
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/build-gcc-newlib/riscv32-unknown-elf/libstdc++-v3/src/c++98/basic_file.cc:370: undefined reference to `__wrap_fstat'
/home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/build-gcc-newlib/riscv32-unknown-elf/libstdc++-v3/src/c++98/basic_file.cc:372: undefined reference to `__wrap_lseek'
/home/nquach/Desktop/freedom-e-sdk/toolchain/lib/gcc/riscv32-unknown-elf/6.1.0/../../../../riscv32-unknown-elf/lib/libstdc++.a(new_opnt.o): In function `operator new(un


Stefan O'Rear

unread,
Feb 18, 2017, 8:48:07 PM2/18/17
to Nhon Quach, RISC-V SW Dev
On Sat, Feb 18, 2017 at 5:34 PM, Nhon Quach <nhon....@gmail.com> wrote:
> I am trying to port a C++ program to RISCV. Compilation seemed to have gone
> well, but I got the following error messages when linking. Any help or
> pointers will be greatly appreciated.

> ../../bsp/../toolchain/bin/riscv32-unknown-elf-ar rcs libwrap.a

> ../../bsp/../toolchain/bin/riscv32-unknown-elf-g++ -O2 -fno-builtin-printf

> -Wl,--wrap=isatty -Wl,--wrap=times -Wl,--wrap=sbrk -Wl,--wrap=_exit -L.
> -Wl,--start-group -lwrap -lc -Wl,--end-group -T
> ../../bsp/env/freedom-e300-hifive1/link.lds -nostartfiles -lstdc++
> -L../../bsp/env
> /home/nquach/Desktop/freedom-e-sdk/toolchain/lib/gcc/riscv32-unknown-elf/6.1.0/../../../../riscv32-unknown-elf/lib/libstdc++.a(eh_alloc.o):
> In function `_GLOBAL__sub_I__ZN9__gnu_cxx9__freeresEv':
> /home/nquach/Desktop/freedom-e-sdk/work/riscv32-gnu-toolchain/src/newlib-gcc/libstdc++-v3/libsupc++/eh_alloc.cc:260:
> undefined reference to `__wrap_free'

So looking at this it appears to be using the wrappers from
https://github.com/sifive/freedom-e-sdk/blob/master/bsp/libwrap/libwrap.mk
; but because -lstdc++ is after -lwrap in your linker command line,
undefined symbols in libstdc++.a cannot be resolved to external
symbols in libwrap.a. Is it possible to tweak your Makefile so that
-lstdc++ comes before the stuff that libwrap.mk adds and see if that
helps?

-s
Reply all
Reply to author
Forward
0 new messages