Fehler libhomegear-base.so.1 beim kompilieren

Hallo Sathya,

ich habe meie SuSE Leap neu instlliert - update auf 42.2. PHP 7 kompiliert, libhomegear, kompiliert - jetzt ist Homegear-master dran - aber da bekomme ich nur diese Fehlermeldung:

libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `cfg'.
libtoolize: linking file `cfg/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: linking file `m4/libtool.m4'
libtoolize: linking file `m4/ltoptions.m4'
libtoolize: linking file `m4/ltsugar.m4'
libtoolize: linking file `m4/ltversion.m4'
libtoolize: linking file `m4/lt~obsolete.m4'
/tmp/tmp.IbRMyoJelO/libhomegear-base-version: error while loading shared libraries: libhomegear-base.so.1: cannot open shared object file: No such file or directory
configure.ac:7: error: AC_INIT should be called with package and version arguments
/usr/share/aclocal-1.13/init.m4:23: AM_INIT_AUTOMAKE is expanded from...
configure.ac:7: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: error: echo failed with exit status: 1

Am 1.März habe ich das schonmal gehabt - alles gelöscht und nochmal neu gemacht hat damals geholfen. Aber diesmal hilft das nicht, ich habe schon 5 Versuche hinter mir - immer der gleiche Fehler.

Hast Du eine Idee, was da schiefläuft?

Gruß und Danke,
Frank

Hallo @Frank,

er findet die Bibliothek offenbar nicht. Was ergibt die Ausgabe von

ls -l /usr/lib | grep libhomegear

? Ist die Bibliothek dort vorhanden?

Viele Grüße

Sathya

Hallo Sathya,

ls -l /usr/lib | grep libhomegear
-rw-r--r-- 1 root root 157442818 Dec 12 11:24 libhomegear-base.a
-rwxr-xr-x 1 root root       974 Dec 12 11:24 libhomegear-base.la
lrwxrwxrwx 1 root root        25 Dec 12 11:24 libhomegear-base.so -> libhomegear-base.so.1.0.0
lrwxrwxrwx 1 root root        25 Dec 12 11:24 libhomegear-base.so.1 -> libhomegear-base.so.1.0.0
-rwxr-xr-x 1 root root   2901096 Dec 12 11:24 libhomegear-base.so.1.0.0

Also die Bibliothek ist dort.

Viele Grüße,
Frank

Ja, das ist sie… Komisch. Gibt es ein “/usr/lib64”? Hilft das Kopieren der Dateien an diesen Ort? Hilft alternativ ein:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
make

Viele Grüße

Sathya

Hallo Sathya,

/usr/lib64 existiert. Ich habe die Dateien da reinkopiert und die links angelegt. Jetzt startet die compilierung. Allerdings komme ich dann auf Fehler:


mv -f ScriptEngine/.deps/libscriptengine_a-php_sapi.Tpo ScriptEngine/.deps/libscriptengine_a-php_sapi.Po
g++ -DHAVE_CONFIG_H -I. -I… -Wall -std=c++11 -DFORTIFY_SOURCE=2 -DGCRYPT_NO_DEPRECATED -I/usr/include/php7-homegear -I/usr/include/php7-homegear/main -I/usr/include/php7-homegear/sapi -I/usr/include/php7-homegear/TSRM -I/usr/include/php7-homegear/Zend -I/usr/include/php7-homegear/php -I/usr/include/php7-homegear/php/main -I/usr/include/php7-homegear/php/sapi -I/usr/include/php7-homegear/php/TSRM -I/usr/include/php7-homegear/php/Zend -DLINUXSYSTEM -g -O2 -MT ScriptEngine/libscriptengine_a-ScriptEngineClient.o -MD -MP -MF ScriptEngine/.deps/libscriptengine_a-ScriptEngineClient.Tpo -c -o ScriptEngine/libscriptengine_a-ScriptEngineClient.o test -f 'ScriptEngine/ScriptEngineClient.cpp' || echo './'ScriptEngine/ScriptEngineClient.cpp
ScriptEngine/ScriptEngineServer.cpp: In constructor âScriptEngine::ScriptEngineServer::ScriptEngineServer()â:
ScriptEngine/ScriptEngineServer.cpp:39:69: error: no matching function for call to âBaseLib::IQueue::IQueue(std::unique_ptrBaseLib::SharedObjects::pointer, int)â
ScriptEngineServer::ScriptEngineServer() : IQueue(GD::bl.get(), 1000)
^
ScriptEngine/ScriptEngineServer.cpp:39:69: note: candidate is:
In file included from /usr/include/homegear-base/BaseLib.h:75:0,
from ScriptEngine/ScriptEngineClientData.h:34,
from ScriptEngine/ScriptEngineProcess.h:34,
from ScriptEngine/ScriptEngineServer.h:35,
from ScriptEngine/ScriptEngineServer.cpp:31:
/usr/include/homegear-base/IQueue.h:52:2: note: BaseLib::IQueue::IQueue(BaseLib::SharedObjects*, uint32_t, uint32_t)
IQueue(SharedObjects* baseLib, uint32_t queueCount, uint32_t bufferSize);
^
/usr/include/homegear-base/IQueue.h:52:2: note: candidate expects 3 arguments, 2 provided
g++ -DHAVE_CONFIG_H -I. -I… -Wall -std=c++11 -DFORTIFY_SOURCE=2 -DGCRYPT_NO_DEPRECATED -I/usr/include/php7-homegear -I/usr/include/php7-homegear/main -I/usr/include/php7-homegear/sapi -I/usr/include/php7-homegear/TSRM -I/usr/include/php7-homegear/Zend -I/usr/include/php7-homegear/php -I/usr/include/php7-homegear/php/main -I/usr/include/php7-homegear/php/sapi -I/usr/include/php7-homegear/php/TSRM -I/usr/include/php7-homegear/php/Zend -DLINUXSYSTEM -g -O2 -MT ScriptEngine/libscriptengine_a-ScriptEngineClientData.o -MD -MP -MF ScriptEngine/.deps/libscriptengine_a-ScriptEngineClientData.Tpo -c -o ScriptEngine/libscriptengine_a-ScriptEngineClientData.o test -f 'ScriptEngine/ScriptEngineClientData.cpp' || echo './'ScriptEngine/ScriptEngineClientData.cpp
ScriptEngine/ScriptEngineServer.cpp: In member function âvoid ScriptEngine::ScriptEngineServer::mainThread()â:
ScriptEngine/ScriptEngineServer.cpp:871:34: error: âclass BaseLib::FileDescriptorManagerâ has no member named âlockâ
GD::bl->fileDescriptorManager.lock();
^
ScriptEngine/ScriptEngineServer.cpp:890:34: error: âclass BaseLib::FileDescriptorManagerâ has no member named âunlockâ
GD::bl->fileDescriptorManager.unlock();
^
mv -f ScriptEngine/.deps/libscriptengine_a-PhpEvents.Tpo ScriptEngine/.deps/libscriptengine_a-PhpEvents.Po
g++ -DHAVE_CONFIG_H -I. -I… -Wall -std=c++11 -DFORTIFY_SOURCE=2 -DGCRYPT_NO_DEPRECATED -I/usr/include/php7-homegear -I/usr/include/php7-homegear/main -I/usr/include/php7-homegear/sapi -I/usr/include/php7-homegear/TSRM -I/usr/include/php7-homegear/Zend -I/usr/include/php7-homegear/php -I/usr/include/php7-homegear/php/main -I/usr/include/php7-homegear/php/sapi -I/usr/include/php7-homegear/php/TSRM -I/usr/include/php7-homegear/php/Zend -DLINUXSYSTEM -g -O2 -MT ScriptEngine/libscriptengine_a-ScriptEngineProcess.o -MD -MP -MF ScriptEngine/.deps/libscriptengine_a-ScriptEngineProcess.Tpo -c -o ScriptEngine/libscriptengine_a-ScriptEngineProcess.o test -f 'ScriptEngine/ScriptEngineProcess.cpp' || echo './'ScriptEngine/ScriptEngineProcess.cpp
Makefile:707: recipe for target ‘ScriptEngine/libscriptengine_a-ScriptEngineServer.o’ failed
make[2]: *** [ScriptEngine/libscriptengine_a-ScriptEngineServer.o] Error 1
make[2]: *** Waiting for unfinished jobs…
ScriptEngine/ScriptEngineClient.cpp: In constructor âScriptEngine::ScriptEngineClient::ScriptEngineClient()â:
ScriptEngine/ScriptEngineClient.cpp:46:69: error: no matching function for call to âBaseLib::IQueue::IQueue(std::unique_ptrBaseLib::SharedObjects::pointer, int)â
ScriptEngineClient::ScriptEngineClient() : IQueue(GD::bl.get(), 1000)
^
ScriptEngine/ScriptEngineClient.cpp:46:69: note: candidate is:
In file included from /usr/include/homegear-base/BaseLib.h:75:0,
from ScriptEngine/…/RPC/RPCMethod.h:37,
from ScriptEngine/ScriptEngineClient.h:35,
from ScriptEngine/ScriptEngineClient.cpp:31:
/usr/include/homegear-base/IQueue.h:52:2: note: BaseLib::IQueue::IQueue(BaseLib::SharedObjects*, uint32_t, uint32_t)
IQueue(SharedObjects* baseLib, uint32_t queueCount, uint32_t bufferSize);
^
/usr/include/homegear-base/IQueue.h:52:2: note: candidate expects 3 arguments, 2 provided
ScriptEngine/ScriptEngineClient.cpp: In member function âvoid ScriptEngine::ScriptEngineClient::start()â:
ScriptEngine/ScriptEngineClient.cpp:204:34: error: âclass BaseLib::FileDescriptorManagerâ has no member named âlockâ
GD::bl->fileDescriptorManager.lock();
^
ScriptEngine/ScriptEngineClient.cpp:206:34: error: âclass BaseLib::FileDescriptorManagerâ has no member named âunlockâ
GD::bl->fileDescriptorManager.unlock();
^
Makefile:721: recipe for target ‘ScriptEngine/libscriptengine_a-ScriptEngineClient.o’ failed
make[2]: *** [ScriptEngine/libscriptengine_a-ScriptEngineClient.o] Error 1
mv -f ScriptEngine/.deps/libscriptengine_a-ScriptEngineClientData.Tpo ScriptEngine/.deps/libscriptengine_a-ScriptEngineClientData.Po
mv -f ScriptEngine/.deps/libscriptengine_a-ScriptEngineProcess.Tpo ScriptEngine/.deps/libscriptengine_a-ScriptEngineProcess.Po
make[2]: Leaving directory '/download/local_Software/homegear/homegear_0.6.7-1574/Homegear-master/src’
Makefile:393: recipe for target ‘all-recursive’ failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/download/local_Software/homegear/homegear_0.6.7-1574/Homegear-master’
Makefile:324: recipe for target ‘all’ failed
make: *** [all] Error 2

Wenn ich den Pfad wie von Dir beschrieben ergänze und dann make aufrufe, laufe ich ebenfalls in Fehler:

make all-recursive
make[1]: Entering directory '/download/local_Software/homegear/homegear_0.6.7-1574/Homegear-master’
Making all in src
make[2]: Entering directory '/download/local_Software/homegear/homegear_0.6.7-1574/Homegear-master/src’
g++ -DHAVE_CONFIG_H -I. -I… -Wall -std=c++11 -DFORTIFY_SOURCE=2 -DGCRYPT_NO_DEPRECATED -I/usr/include/php7-homegear -I/usr/include/php7-homegear/main -I/usr/include/php7-homegear/sapi -I/usr/include/php7-homegear/TSRM -I/usr/include/php7-homegear/Zend -I/usr/include/php7-homegear/php -I/usr/include/php7-homegear/php/main -I/usr/include/php7-homegear/php/sapi -I/usr/include/php7-homegear/php/TSRM -I/usr/include/php7-homegear/php/Zend -DLINUXSYSTEM -g -O2 -MT ScriptEngine/libscriptengine_a-ScriptEngineServer.o -MD -MP -MF ScriptEngine/.deps/libscriptengine_a-ScriptEngineServer.Tpo -c -o ScriptEngine/libscriptengine_a-ScriptEngineServer.o test -f 'ScriptEngine/ScriptEngineServer.cpp' || echo './'ScriptEngine/ScriptEngineServer.cpp
ScriptEngine/ScriptEngineServer.cpp: In constructor âScriptEngine::ScriptEngineServer::ScriptEngineServer()â:
ScriptEngine/ScriptEngineServer.cpp:39:69: error: no matching function for call to âBaseLib::IQueue::IQueue(std::unique_ptrBaseLib::SharedObjects::pointer, int)â
ScriptEngineServer::ScriptEngineServer() : IQueue(GD::bl.get(), 1000)
^
ScriptEngine/ScriptEngineServer.cpp:39:69: note: candidate is:
In file included from /usr/include/homegear-base/BaseLib.h:75:0,
from ScriptEngine/ScriptEngineClientData.h:34,
from ScriptEngine/ScriptEngineProcess.h:34,
from ScriptEngine/ScriptEngineServer.h:35,
from ScriptEngine/ScriptEngineServer.cpp:31:
/usr/include/homegear-base/IQueue.h:52:2: note: BaseLib::IQueue::IQueue(BaseLib::SharedObjects*, uint32_t, uint32_t)
IQueue(SharedObjects* baseLib, uint32_t queueCount, uint32_t bufferSize);
^
/usr/include/homegear-base/IQueue.h:52:2: note: candidate expects 3 arguments, 2 provided
ScriptEngine/ScriptEngineServer.cpp: In member function âvoid ScriptEngine::ScriptEngineServer::mainThread()â:
ScriptEngine/ScriptEngineServer.cpp:871:34: error: âclass BaseLib::FileDescriptorManagerâ has no member named âlockâ
GD::bl->fileDescriptorManager.lock();
^
ScriptEngine/ScriptEngineServer.cpp:890:34: error: âclass BaseLib::FileDescriptorManagerâ has no member named âunlockâ
GD::bl->fileDescriptorManager.unlock();
^
Makefile:707: recipe for target ‘ScriptEngine/libscriptengine_a-ScriptEngineServer.o’ failed
make[2]: *** [ScriptEngine/libscriptengine_a-ScriptEngineServer.o] Error 1
make[2]: Leaving directory '/download/local_Software/homegear/homegear_0.6.7-1574/Homegear-master/src’
Makefile:393: recipe for target ‘all-recursive’ failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/download/local_Software/homegear/homegear_0.6.7-1574/Homegear-master’
Makefile:324: recipe for target ‘all’ failed
make: *** [all] Error 2

Gruß,
Frank

Hallo @Frank,

mischt du möglicherweise Dev- und Master-Zweig?

ScriptEngine/ScriptEngineServer.cpp:39:69: error: no matching function for call to BaseLib::IQueue::IQueue(std::unique_ptr::pointer, int)â ScriptEngineServer::ScriptEngineServer() : IQueue(GD::bl.get(), 1000)

Das ist die Signatur des Master-Zweiges. Wenn die Basisbibliothek aus dem Dev-Zweig kommt, dann erklärt das die Fehlermeldung.

Viele Grüße

Sathya

Hallo Sathya,

bin zurück aus dem Urlaub.

Wie erkenne ich denn, ob etwas aus dem master oder dev-Zweig kommt?

Ich habe folgendes heruntergeladen:

wget https://github.com/Homegear/libhomegear-base/archive/master.zip
wget https://github.com/Homegear/Homegear/archive/master.zip

Das sollte doch beides master sein, oder?

dev möchte ich gar nicht benutzen …

Gruß,
Frank

Hallo @frank_sg,

ja, das ist beides “Master”. Hmm. Vielleicht ist beim Mergen irgendetwas schief gelaufen. Ich bin dieses Wochenende unterwegs. Sobald ich wieder zurück bin, mach ich einen - schon längst fälligen - “Merge” des aktuellen “dev”-Zweiges in den “Master”-Zweig. Danach sollte es in jedem Fall klappen. In der Zwischenzeit schau dorch trotzdem mal, ob es mit der dev-Version klappt?

Viele Grüße

Sathya

Hallo Sathya,

ich habe jetzt mal dev heruntergeladen. Das wird dann ja auch in ein dev-Verzeichnis ausgepackt … das fällt also schon irgendwie auf, wenn man da mischt.

Hat auch nicht funktioniert, gibt auch Fehler beim kompilieren. (das ist der aktuelle homegear_0.6.7-1584)

Komisch ist auch: Unter der alten leap-Version habe ich homegear_0.6.7-1574 kompilieren können und zum Laufen gebracht, unter der neuen leap-Version geht es nicht mehr. Da kann doch nicht an der Durchmischung der Zweige liegen …

Gruß,
Frank

Ohne da jetzt thematisch drin zu sein: dev müsste mindestens 0.7-1508 sein. Weil die ist bei mir mit der aktuellen nightly installiert…

Hallo @frank_sg,

ich habe mal OpenSUSE Leap 42.2 bei mir installiert. Hier hat das Kompilieren der aktuellen Master-Version mit folgenden Änderungen geklappt:

  • Nach dem make install der Basisbibliothek, die libhomegear-base*-Dateien von /usr/lib nach /usr/lib64 kopieren (ganz wichtig!).
  • Anschließend Homegear herunterladen und aus der Datei src/Makefile.am das -lmysqlclient entfernen. Aus der Datei makeRelease.sh das “–with-curl” entfernen.
  • Das Kompilieren sollte jetzt klappen.

Viele Grüße

Sathya

Hallo sathya,

so konnte ich alles kompilieren. Vielen Dank für Deine Hilfe.

Verstehen tue ich es nicht so ganz - vor allem auch nicht, wie Du daruaf gekommen bist, was zu ändern ist …

Gruß,
Frank

Hallo @frank_sg,

schön, dass es jetzt klappt :slight_smile:!

Ich muss die Makefiles noch einmal anpassen, damit die zu ändernden Punkte automatisch erkannt werden. “–with-curl” und “-lmysqlclient” können (bzw. in Ermangelung der Abhängigkeiten müssen) weg, weil diese nur für PHP benötigt werden. PHP haben wir aber ohne cURL- und MySQL-Unterstützung kompiliert.

Viele Grüße

Sathya

Ist jetzt im configure-Skript, manuelle Anpassungen sollten also nicht mehr erforderlich sein ;-).