• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

downgrad c-compiler ?!

tmaniacr

Newbie
hallo, ich bin leider kein linux-experte, deshalb klingt mein problem sicher lächerlich, ist jedoch für mich ein rätsel :)


ich habe fedora 4 installiert mit gcc-4 (c-compiler)

ich benötige jetzt allerdings, um ein vorgefertigtes makefile aus zu führen, die gcc-version 3.x


ich habe mir dazu 2 files aus dem netz gezogen:

gcc-3.2.tar.bz2
gcc-3.4.4-2.fc3.src.rpm

jetzt muss ich irgendwie die compiler-version downgraden, kann mir jemand halbwegs verständlich erklären was ich dazu tun muss?

vielen dank im vorraus
 
tmaniacr schrieb:
ich benötige jetzt allerdings, um ein vorgefertigtes makefile aus zu führen, die gcc-version 3.x
Dieser Ansatz ist komplett falsch.

1. Wenn das Programm zum Kompilieren einen älteren GCC braucht, dann änderst Du nicht das System, das daran völlig unschuldig ist, sondern das Programm.

Sprich: Du suchst nach einem Patch für das Programm, um es doch mit dem GCC 4 zu kompilieren.

2. Fedora liefert den alten GCC bereits als fertig benutzbares RPM mit:

http://rpm.pbone.net/index.php3/stat/4/idpl/1952445/com/compat-gcc-32-3.2.3-47.fc4.i386.rpm.html

Diese Dateien, die Du da runtergeladen hast, löschst Du am besten gleich wieder, weil sie falsch sind, und installierst das oben verlinkte RPM.

Ach ja: Im Makefile dann bitte die Aufrufe von "gcc" durch "gcc32" ersetzen, mehr ist nicht zu tun.
 
OP
T

tmaniacr

Newbie
erstmal danke für die schnelle und präzise antwort :)

ich hab das file jetzt herunter geladen und versucht über das terminal zu installieren:



Code:
rpm -ih gcc-3.4.4-2.fc3.src.rpm

leider kommt nur folgende meldung zurück:

Code:
Fehler: cannot create %sourcedir /usr/src/redhat/SOURCES

was hab ich falsch gemacht?

**EDIT**

ich hab jetzt die ordner manuell erstellt, dann hat es funktioniert:

Code:
/usr/src/redhat/SOURCES
Code:
rpm -ih gcc-3.4.4-2.fc3.src.rpm

jetzt ersetzte ich die gcc einträge im makefile *hoff*


so, hab 6 einträge im makefile geändert, um dann fest zu stellen, das die gcc-3.4.4 zwar irgendwie entpackt ist, aber noch nicht installiert, ist immernoch die 4er version *ratlosigkeit*

hilfe ! :)
 
OP
T

tmaniacr

Newbie
ums nochmal auf den punkt zu bringen:

ich hab mittels yum install, sämtliche erforderlichen pakete installiert

trotzdem ist die gcc-version immernoch 4, wie schalte ich sie jetzt auf 3 runter?
 
Du hast nicht die Datei runtergeladen, die ich genannt hatte. Das war ja schon wieder ein Source-RPM! Und dann auch noch eines für Fedora Core 3!

Ich kann Dir jetzt leider erstmal nicht mehr weiterhelfen, weil ich nicht weiß, welche Pakete für unterschiedliche Distributionen Du kunterbunt gemischt hast. Sorry.

Zum Testen:
Code:
rpm -qa | grep gcc
Da darf nichts auf Fedora Core 3 hindeuten, weil Du Fedora Core 4 hast. Fedora Core 3-RPMs erkennt man an der Zeichenfolge "fc3" in der Release-Nummer. Sag mir mal bitte die komplette Ausgabe, die müssen alle wieder runter.

PS: Ohne die Angabe, wie die Makefiles des zu kompilierenden Programms aussehen, kann ich Dir nicht sagen, wie man auf die andere GCC-Version wechselt. Wenn es nicht anders geht, kopier das komplette Makefile ins Forum.
 
OP
T

tmaniacr

Newbie
hier die installierte version:
das ist das pure makefile, ohne änderungen
Code:
[root@server install-misdn]# rpm -q -a | grep gcc
libgcc-4.0.0-8
gcc-java-4.0.0-8
compat-gcc-32-3.2.3-47.fc4
gcc-4.0.0-8
compat-gcc-32-c++-3.2.3-47.fc4

ich hab deine version zuerst installiert, da ging es aber auch nicht.

hier das makefile:



Code:
BASEDIR=$(shell pwd)


########################################
# USER CONFIGS
########################################

#PATH to linux source/headers
LINUX=/usr/src/kernels/2.6.11-1.1369_FC4-i686
LINUX=/lib/modules/$(shell uname -r)/build

#where to find actual things (mISDN, andmISDNuser, also chan_misdn)
HTTP_MISDN_SRC=http://isdn.jolly.de/download/v3.1
HTTP_MISDNUSER_SRC=http://isdn.jolly.de/download/v3.1

MISDN_TGZ=mISDN_for_PBX4Linux-3.0.tar.gz
MISDNUSER_TGZ=mISDNuser_for_PBX4Linux-3.0.tar.gz


# Here you could set a release for example
HTTP_CHAN_MISDN_SRC=http://www.beronet.com/download/chan_misdn/stable/
CHAN_MISDN_TGZ=chan_misdn.tar.gz


MISDNUSERCC=$(shell sed -ne "s/HOSTCC.*=.*\(gcc.*\)/\1/p" $(LINUX)/Makefile | grep gcc || echo gcc )

########################################
# USER CONFIGS END
########################################

#Internals
MISDNDIR=$(BASEDIR)/mISDN
MISDNUSERDIR=$(BASEDIR)/mISDNuser
CHAN_MISDNDIR=$(BASEDIR)/chan_misdn

MISDN_SRC=$(MISDNDIR)/drivers/isdn/hardware/mISDN
MISDN_INC=$(MISDNDIR)/include

EXTRAFLAGS+=-DMISDNUSER_JOLLY

#EXTRA_CONFIGS=$(shell cat $(LINUX)/.config | sed -e "s/\#//g" )
CONFIGS+=CONFIG_MISDN_DRV=m CONFIG_MISDN_DSP=m 
CONFIGS+=CONFIG_MISDN_HFCMULTI=m 
CONFIGS+=CONFIG_MISDN_HFCPCI=m
CONFIGS+=CONFIG_MISDN_HFCUSB=m
#CONFIGS+=CONFIG_MISDN_AVM_FRITZ=m
CONFIGS+=$(EXTRA_CONFIGS)

MISDNUSER_LIBS=$(MISDNUSERDIR)/libmISDN.a $(MISDNUSERDIR)/libisdnnet.a

all: test_preempt $(CHAN_MISDNDIR)/chan_misdn.so


$(CHAN_MISDNDIR)/chan_misdn.so: $(CHAN_MISDNDIR) MISDN_MAKE_MODS $(MISDNUSER_LIBS)
#
# Make the chan_misdn stuff
#
	@echo
	@echo "Makeing chan_misdn"
	@echo "=================="
	@echo

	if ! grep touched_by_crich $(CHAN_MISDNDIR)/Makefile ; then \
		echo  "#touched_by_crich" > $(CHAN_MISDNDIR)/tmpMakefile; \
		echo "CFLAGS+=-I$(MISDNUSERDIR)/include -I$(MISDN_INC) -I$(MISDNUSERDIR)/i4lnet/" >>  $(CHAN_MISDNDIR)/tmpMakefile; \
		cat $(CHAN_MISDNDIR)/Makefile >> $(CHAN_MISDNDIR)/tmpMakefile; \
		mv $(CHAN_MISDNDIR)/tmpMakefile $(CHAN_MISDNDIR)/Makefile; \
		sed -i -e "s@MISDNUSER=.*@MISDNUSER=$(MISDNUSERDIR)@" $(CHAN_MISDNDIR)/Makefile; \
	fi
	cd $(CHAN_MISDNDIR);  make EXTRA_CFLAGS="-I$(MISDNUSERDIR)/include -I$(MISDN_INC) -I$(MISDNUSERDIR)/i4lnet/ $(EXTRAFLAGS)" MISDNUSER=$(MISDNUSERDIR)



#$(MISDN_MODS): $(MISDNDIR)
MISDN_MAKE_MODS: $(MISDNDIR) 

#
# Make The mISDN stuff
#
	@echo
	@echo "Makeing mISDN"
	@echo "============="
	@echo
	if ! diff $(MISDNDIR)/include/linux/mISDNif.h /usr/include/linux/mISDNif.h > /dev/null 2>/dev/null ; then cp $(MISDNDIR)/include/linux/mISDNif.h /usr/include/linux/mISDNif.h ; fi
	if ! diff $(MISDNDIR)/include/linux/mISDNif.h $(LINUX)/include/linux/mISDNif.h > /dev/null 2>/dev/null ; then cp $(MISDNDIR)/include/linux/mISDNif.h $(LINUX)/include/linux/mISDNif.h ; fi
	if ! diff $(MISDNDIR)/include/linux/isdn_compat.h /usr/include/linux/isdn_compat.h >/dev/null 2>/dev/null ; then cp $(MISDNDIR)/include/linux/isdn_compat.h /usr/include/linux/isdn_compat.h ; fi
	if ! diff $(MISDNDIR)/include/linux/isdn_compat.h $(LINUX)/include/linux/isdn_compat.h >/dev/null 2>/dev/null ; then cp $(MISDNDIR)/include/linux/isdn_compat.h $(LINUX)/include/linux/isdn_compat.h ; fi
	cp $(MISDNDIR)/drivers/isdn/hardware/mISDN/Makefile.v2.6 $(MISDNDIR)/drivers/isdn/hardware/mISDN/Makefile

	cd $(LINUX) ; make SUBDIRS=$(MISDN_SRC) modules $(CONFIGS) 


$(MISDNUSER_LIBS): $(MISDNUSERDIR)
#
# Make the mISDNuser stuff
#
	@echo
	@echo "Makeing mISDNuser"
	@echo "================="
	@echo
	if ! grep touched_by_crich $(MISDNUSERDIR)/Makefile ; then \
		sed -i -e "s@export CFLAGS@CFLAGS+=-I$(MISDN_INC)\nexport CFLAGS\n#touched_by_crich@" $(MISDNUSERDIR)/Makefile ; \
	fi
	echo $(MISDNUSERCC)
	cd  $(MISDNUSERDIR); export CC=$(MISDNUSERCC) ; make 



$(MISDN_TGZ):
	if [ ! -d $(MISDNDIR) ] ; then wget $(HTTP_MISDN_SRC)/$(MISDN_TGZ); fi

$(MISDNUSER_TGZ):
	if [ ! -d $(MISDNUSERDIR) ] ; then wget $(HTTP_MISDNUSER_SRC)/$(MISDNUSER_TGZ); fi

$(CHAN_MISDN_TGZ):
	if [ ! -d $(CHAN_MISDNDIR) ] ; then wget $(HTTP_CHAN_MISDN_SRC)/$(CHAN_MISDN_TGZ); fi

$(MISDNDIR): $(MISDN_TGZ)
	if [ ! -d $(MISDNDIR) ] ; then tar xzf $(MISDN_TGZ) ; \
		patch -p1 -d $(MISDNDIR) < patches/mISDN_echo_cancel.patch; \
		patch -p1 -d $(MISDNDIR) < patches/mISDN_fedora.patch; \
	fi

$(MISDNUSERDIR): $(MISDNUSER_TGZ)
	if [ ! -d $(MISDNUSERDIR) ] ; then tar xzf $(MISDNUSER_TGZ); \
		patch -p1 -d $(MISDNUSERDIR) < patches/mISDNuser-dup-strL2State.patch; \
		patch -p1 -d $(MISDNUSERDIR) < patches/mISDNuser-kernel-header-abuse.patch; \
	fi

$(CHAN_MISDNDIR): $(CHAN_MISDN_TGZ)
	if [ ! -d $(CHAN_MISDNDIR) ] ; then tar xzf $(CHAN_MISDN_TGZ); fi


install: all
	cd $(LINUX) ; make SUBDIRS=$(MISDN_SRC) modules_install 

	depmod
	cd $(CHAN_MISDNDIR); make install

snapshot:
	rm -rf /tmp/install-misdn
	mkdir /tmp/install-misdn
	mkdir /tmp/install-misdn/patches
	cp Makefile README /tmp/install-misdn/
	cp patches/*.patch /tmp/install-misdn/patches/
	cd /tmp ; tar czf install-misdn.tar.gz install-misdn


GCCVERSION=$(shell $(CC) --version  | grep GCC  | cut -d " " -f 3  | cut -d "." -f 1)
test_preempt:
	@if  grep 'CONFIG_DEBUG_SPINLOCK=y' $(LINUX)/.config   ; then \
		echo -e "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!\nDisable the DEBUG_SPINLOCK Setting in your Kernel Config.\n with this option set, mISDN will not work! \n\n" ;\
		read ; \
		exit 1 ; \
	fi
	@if  grep 'CONFIG_DEBUG_SPINLOCK_SLEEP=y' $(LINUX)/.config   ; then \
		echo -e "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!\nDisable the DEBUG_SPINLOCK_SLEEP Setting in your Kernel Config.\n with this option set, mISDN will not work! \n\n" ;\
		read ; \
		exit 1 ; \
	fi
	@if  grep 'CONFIG_SMP=y' $(LINUX)/.config   ; then \
		echo -e "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!\nDisable the SMP Setting in your Kernel Config.\n\n" ; \
		read ; \
		exit 1 ; \
	fi
	@if test "$(GCCVERSION)" -gt 3 ; then \
		echo -e "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!\nYou're using GCC 4! Please downgrade to gcc-3.x and type:\nexport CC=gcc-3.x\nbefore issuing make again.\nyou won't have success with gcc-4!\n\n" ; \
		read ; \
		exit 1 ; \
	fi




.PHONY: install all snapshot test_preempt MISDN_MAKE_MODS

clean:
	rm -rf mISDN/drivers/isdn/hardware/mISDN/*.o
	rm -rf mISDN/drivers/isdn/hardware/mISDN/*.ko
	rm -rf *~
	make -C mISDNuser clean
	make -C $(CHAN_MISDNDIR) clean

update:
	if [ -d TMP ]; then rm -rf TMP; fi
	mkdir TMP
	wget -PTMP/ http://www.beronet.com/downloads/install-misdn.tar.gz
	tar zxf TMP/install-misdn.tar.gz --directory=TMP/
	rm -rf chan_misdn chan_misdn.tar.gz mISDN mISDN_for_PBX4Linux-3.0.tar.gz mISDNuser mISDNuser_for_PBX4Linux-3.0.tar.gz patches README
	mv TMP/install-misdn/* .
	rm -rf TMP
	make

	@ echo
	@ echo "You've successfully updated your mISDN Sources!"
	@ echo "Install them via \"make install\"."
	@ echo
 

TeXpert

Guru
Du möchtest die Shellvariable CC richtig setzen, also
Code:
export CC=foobar
wobei foobar dann auf den passenden Compiler zeigen sollte
 
Also erstmal: Die Pakete sind richtig, diese falschen Source-RPMs waren harmlos, weil es eben nur Source-RPMs waren. Glück gehabt. ;)

Dann: TeXpert hat Recht, allerdings würde ich zusätzlich auch noch MISDNUSERCC exportieren.

Also insgesamt:
Code:
export CC="gcc32"
export MISDNUSERCC="gcc32"
make
Sollte funktionieren...
 
Oben