Compile Homegear unter gentoo x64 scheitert u.a. an php7.1

Hallo,
Ziel ist es homegear 0.6.xx zusammen mit php7.1 unter gentoo x64 zum Compilieren & Linken zu bewegen.
Homegear 0.5.xx zusammen mit php5.x hatte vor einiger Zeit noch einwandfrei funktioniert.
PHP7.1 incl. pthreads hatte ich durch einen System-Upgrade bekommen. Abgelegt unter /usr/lib64/php7.1/.

Doch der Reihe nach:

  • homegear 0.6.xx ließ sich zuerst nicht compilieren, da kein “-pthread” gesetzt war. Fehlermeldung:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/…/…/…/…/lib64/libhomegear-base.so: undefined reference to pthread_create' /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libhomegear-base.so: undefined reference topthread_join’

  • homegear 0.6.xx ließ sich auch nicht compilieren, da ein Konvertierungsfehler vorlag:

ScriptEngine/php_sapi.cpp:225:1: error: invalid conversion from ‘void ()(char)’ to ‘void ()(char, int)’ [-fpermissive]

  • Beides unelegant per export CXXFLAGS=’-fpermissive -pthread’ umgangen, um zumindest weiter zu kommen.

  • Der Vollständigkeit halber das verwendete Skript:

#!/bin/bash
/usr/bin/renice -n 19 --pid ${BASHPID}
export TMPDIR=/usr/local/src/homegear/
export CXXFLAGS=’-fpermissive -pthread’
for zdir in libhomegear-base-master Homegear-master;do
cd ${zdir}
make clean
bash -xv ./makeRelease.sh 3
cd -
done

  • Nach Überspringen dieser beiden Hürden nochmal alles versucht zu bauen. Das Ergebniss sieht wie folgt aus:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/…/…/…/…/x86_64-pc-linux-gnu/bin/ld: cannot find -lphp7-homegear
collect2: error: ld returned 1 exit status

  • Und hier bin ich leider mit meinem Latain am Ende. Ich habe schon versucht im Homegear-master/src/Makefile.am die AM_LDFLAGS um einen zusätzlichen -Wl,-rpath=/usr/lib64/php7.1/lib64 zu erweitern, oder statt LIBS -lphp7-homegear die Anweisung -llibphp7 einzutragen, oder den kompletten Pfad. Oder in /usr/lib64 einen Link mit Namen php7-homegear.so auf /usr/lib64/php7.1/libphp7.so anzulegen. Gut…das war alles Try&Error. In diesem Falle relativ viel Error.

Frage: wer weiß Rat wie homegear 0.6.xx mit einem Standardmäßig installierten php7.1 zum Compilieren&Linken zu bewegen ist ?

Grüße & Danke
puttybug

Hallo @puttybug,

Gar nicht. PHP muss als statische Bibliothek kompiliert werden, d. h., auch wenn auf deinem System PHP installiert ist, muss es neu kompiliert werden. PHP 7.1 wird zur Zeit auch noch nicht unterstützt (bzw. ist ungetestet). Daher verwende PHP 7.0. Eine Anleitung zum Kompilieren findest du hier: https://doc.homegear.eu/data/homegear/installation.html#compiling-from-source.

Dieser Fehler mag mit der nicht vorhandenen PHP7-Bibliothek zusammenhängen - zumindest sehe ich auf Anhieb an der Stelle im Quelltext kein Problem.

“-rpath” wird meines Wissens nur zur Laufzeit verwendet. Verwende zur Angabe von Bibliothekenpfaden “-L”. Dafür muss die passende Bibliothek aber auch im angegebenen Pfad sein. Das ist bei dir nicht der Fall.

Das würde prinzipiell sogar gehen, unter der Voraussetzung, dass es bei dir eine Datei “libphp7.a” gibt. Das wird nicht der Fall sein. Außerdem würde es sich um PHP 7.1 handeln.

Die so-Datei lässt sich nicht für statische Verlinkung verwenden, deswegen geht das nicht.

Viele Grüße

Sathya

Update: 07.03.2017: kaum paßt man die homegear Config an die neuen homegear 0.6.x Config Files klappt es auch mit dem Homematik Zoo.
Dies nur also Rückmeldung dass das Problem vor dem Rechner saß.


Hallo Sathya,
danke für deine Antwort.
Kurzfassung: mit php7.0 + pthreads, in der manuell zu installierenden Version, ist ein Compile möglich und homegear startet auch friedlich.

Compile ist allerdings nur mit export CXXFLAGS=’-pthread’ möglich. Da mag möglicherweise mein GCC andere Defaults als der vom ubuntu/opensuse haben.

Was noch nicht klappt: der homegear 0.6.x findet die Geräte die unter 0.5.x angelernt wurden. Dieses Problem wird sich aber auch lösen lassen.

Grüße puttybug

1 Like