Temat: undefined reference to symbol '__floatdidf@@GCC_3.0'

Chcę skompilować pewną paczkę, zrobiłem swojego makefile-a.
Kompilacja przechodzi, wywala się na linkowaniu:

mipsel-openwrt-linux-musl-ld: accept.o: undefined reference to symbol '__floatdidf@@GCC_3.0'
mipsel-openwrt-linux-musl-ld: /home/coconuts/github/openwrt/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../../toolchain-mipsel_24kc_gcc-7.5.0_musl/lib/libgcc_s.so.1: error adding symbols: DSO missing from command line

Jaką zależność muszę dodać do makefile? Na dużym linuxie jest to libm, co jest odpowiednikiem na OpenWrt?

Kompiluję na ramipsa MT7620, soft-float.

2

Odp: undefined reference to symbol '__floatdidf@@GCC_3.0'

Źle kompilację robisz. Dodawaj w wywołaniu gcc dodatkowe biblioteki PO plikach obiektowych a nie przed.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: undefined reference to symbol '__floatdidf@@GCC_3.0'

Jak zmienić kolejność? Parametry do linkera są dodawane automatycznie, nie robię tego z palca.

4

Odp: undefined reference to symbol '__floatdidf@@GCC_3.0'

To pokaż makefile którym to robisz.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: undefined reference to symbol '__floatdidf@@GCC_3.0'

include $(TOPDIR)/rules.mk

PKG_NAME:=aprsc
PKG_VERSION:=2.1.14
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/hessu/aprsc/archive/refs/tags/release/
PKG_HASH:=6eda87aebe4ef2592381fa763e8caf4a2fcdcab5c1c155e6d84498eada00f675

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-release-$(PKG_VERSION)

PKG_INSTALL:=1
PKG_FIXUP:=autoreconf

include $(INCLUDE_DIR)/package.mk
#include $(INCLUDE_DIR)/host-build.mk
CONFIGURE_PATH:=src
MAKE_PATH:=src

define Package/aprsc
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=+libevent2 +libpthread +libc +libgcc +libstdcpp
  TITLE:=APRS-IS server
  URL:=http://he.fi/aprsc/
endef

define Package/aprsc/description
        aprsc (pronounced a-purrs-c) is a plain APRS-IS server intended to be used on the core and Tier2 APRS-IS servers.
endef

TARGET_LDFLAGS += -lc -lgcc

define Package/aprsc/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/aprsc $(1)/usr/bin
endef

$(eval $(call BuildPackage,aprsc))

DEPENDS to już akt desperacji ;-)

6

Odp: undefined reference to symbol '__floatdidf@@GCC_3.0'

Nie, coś innego jest problemem.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7

Odp: undefined reference to symbol '__floatdidf@@GCC_3.0'

Dobra, nie chce mi się poprawiać świata dla ideologii. Tu masz makefile z łatką: https://dl.eko.one.pl/projekty/aprsc.tgz u mnie się kompiluje.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8

Odp: undefined reference to symbol '__floatdidf@@GCC_3.0'

Dzięki wielkie za poprawienie Makefile - sam bym na to nie wpadł.

Rzeczywiście kompiluje się, ale nie chce się wykonać:

root@OpenWrt:~# aprsc
-ash: aprsc: not found

ELF wygląda OK, podobnie jak w innych binarkach na urządzeniu:

root@OpenWrt:~# readelf -h $(which aprsc)
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 01 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       1
  Type:                              EXEC (Executable file)
  Machine:                           MIPS R3000
  Version:                           0x1
  Entry point address:               0x4034a0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          0 (bytes into file)
  Flags:                             0x74001005, noreorder, cpic, o32, mips16, mips32r2
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         10
  Size of section headers:           0 (bytes)
  Number of section headers:         0
  Section header string table index: 0

Zastanawiający jest program header ELFa - nie mam pliku /usr/lib/libc.so.1:

INTERP         0x000174 0x00400174 0x00400174 0x00013 0x00013 R   0x1
      [Requesting program interpreter: /usr/lib/libc.so.1]

Zasymlinkowanie libc.so.1 daje "Illegal instruction".

9

Odp: undefined reference to symbol '__floatdidf@@GCC_3.0'

Problem jest pewnie własnie w tym jak to jest linkowane.  Trzeba by zrobić własny makefile do tego i tyle.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.