Coder Social home page Coder Social logo

Comments (4)

avivbeeri avatar avivbeeri commented on May 25, 2024

I've unfortunately not tried to compile DOME myself on raspberry pi and ARM architecture hosts, but a couple members of the community have managed it. It requires a few modifications to the build process for DOME as well as Wren, from what I understand.

from dome.

oschettler avatar oschettler commented on May 25, 2024

Hi @avivbeeri, thank you for your answer. I will look around for hints on how to proceed.

Trying another from my collection of aging machines, this time a laptop with i386-based Raspberry Pi Desktop. Same error in the link step when invoking with ARCH=32bit make -e:

==== Linking DOME (32bit linux release   shared) ====
cc -DDOME_HASH=\"a502a22\" -DDOME_VERSION=\"v1.6.1\" -std=c99 -pedantic -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unused-value -Wno-clobbered -Wno-maybe-uninitialized -Wno-attributes -fvisibility=hidden -O3  -o dome obj/32bit/*.o  -Llib  -lSDL2  -Wl,--wrap=log,--wrap=log2,--wrap=exp,--wrap=pow,--wrap=expf,--wrap=powf,--wrap=logf -lm -lwren 
/usr/bin/ld: obj/32bit/glibc_compat.o: in function `__wrap_pow':
glibc_compat.c:(.text+0x20): undefined reference to `pow@GLIBC_2.2.5'
/usr/bin/ld: obj/32bit/glibc_compat.o: in function `__wrap_exp':
glibc_compat.c:(.text+0x48): undefined reference to `exp@GLIBC_2.2.5'
/usr/bin/ld: obj/32bit/glibc_compat.o: in function `__wrap_log':
glibc_compat.c:(.text+0x78): undefined reference to `log@GLIBC_2.2.5'
/usr/bin/ld: obj/32bit/glibc_compat.o: in function `__wrap_log2':
glibc_compat.c:(.text+0xa8): undefined reference to `log2@GLIBC_2.2.5'
/usr/bin/ld: obj/32bit/glibc_compat.o: in function `__wrap_logf':
glibc_compat.c:(.text+0xdf): undefined reference to `logf@GLIBC_2.2.5'
/usr/bin/ld: obj/32bit/glibc_compat.o: in function `__wrap_powf':
glibc_compat.c:(.text+0x11f): undefined reference to `powf@GLIBC_2.2.5'
/usr/bin/ld: obj/32bit/glibc_compat.o: in function `__wrap_expf':
glibc_compat.c:(.text+0x14f): undefined reference to `expf@GLIBC_2.2.5'
collect2: error: ld returned 1 exit status

from dome.

trelemar avatar trelemar commented on May 25, 2024

Check out the Makefile in my fork on the develop branch. The glibc wrapper functions do not work on any arm device that I have tried. I modified the makefile to not depend on the glibc_compat.o if the architecture is aarch64. I have a theory as to why this happens but I'm not knowledgeable enough to know for sure. What I do know is you don't need the wrapper functions on an arm distro and it is working fine.

Line 22:

UNAME_M = $(shell uname -m)

checks what architecture the machine is running and then here is where it assigns it to the ARCH variable:

else ifeq ($(UNAME_S), Linux)
SYSTEM ?= linux
	ifeq ($(UNAME_M), aarch64)
		ARCH ?= arm
	else
		ARCH ?= 64bit
	endif

All I did after that is check what the ARCH is when the compiler adds the dependencies for a linux build and omit the glibc COMPAT_DEP. That chunk is right here

ifneq ($(filter linux,$(TAGS)),)
	ifneq ($(filter arm,$(TAGS)),)
	else
		COMPAT_DEP = $(OBJS)/glibc_compat.o
		LDFLAGS += -Wl,--wrap=log,--wrap=log2,--wrap=exp,--wrap=pow,--wrap=expf,--wrap=powf,--wrap=logf
	endif
endif
LDFLAGS += $(DEPS)

from dome.

oschettler avatar oschettler commented on May 25, 2024

I've found a solution:

In file include/glibc_compat.c, there is this block with assembly statements:

// x86_64 glibc -
#define asm __asm__
asm (".symver pow, pow@GLIBC_2.2.5");
asm (".symver exp, exp@GLIBC_2.2.5");
asm (".symver log, log@GLIBC_2.2.5");
asm (".symver log2, log2@GLIBC_2.2.5");
asm (".symver logf, logf@GLIBC_2.2.5");
asm (".symver powf, powf@GLIBC_2.2.5");
asm (".symver expf, expf@GLIBC_2.2.5");
#undef asm

If I wrap this in #if 0 ... #endif, dome links fine. I do not totally understand these statements, but I assume they bind the math function to a certain version of GLIBC which is not installed on my system.

from dome.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.