Nginx eigenes Modul -> Abhängigkeiten (MariaDB Bibliothek) richtig setzen

NginxModul

OktoberKaffee
Hi Leute,

da im Nginx-Forum tote Hose ist, versuche ich es mal hier.

Ich habe ein simples Modul in C++ geschrieben. Darin will ich auch auf meine Datenbank (MariaDB) zugreifen.
Dazu habe ich den MariaDB Connector/C heruntergeladen und in ein Testordner (/test/mariadb/include & /test/mariadb/lib) entpackt.

Beim configure-Aufruf von Nginx nutze ich folgende Optionen:
Code:
--with-cc-opt="-I/test/mariadb/include" --with-ld-opt="-L/test/mariadb/lib" --add-dynamic-module=ttt

In der "config" meines Moduls habe ich folgendes stehen:
Code:
ngx_module_libs="-lmariadbclient"

Der Konfigurations- und Kompiliervorgang läuft erfolgreich durch, doch Nginx lässt sich nicht starten.
Ich erhalte lediglich den Fehler: " dlopen() ... failed ... undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE"

Den Pfad "/test/mariadb/lib" habe ich in einer Datei im Ordner "/etc/ld.so.conf.d/" hinterlegt, dürfte also bekannt sein.
Im Internet habe ich fast gar nichts dazu finden können.

Ich bin da noch nicht so bewandert in der ganzen Materie.
Würde mich echt freuen, wenn mir da jemand weiterhelfen kann.

PS: Ist es normal, dass das Interface vom Forum auf Englisch ist? Ist ja schließlich ein deutsches Forum(.de)
 
Dumme Frage, aber die fehlende Referenz zu googeln hast du schon versucht? ;)
Er kann die dynamische Linkung für StdC++ nicht aufbauen, versuch mal mit --with-ld-opt="-lstdc++"

PS: Nginx hat mit "Openresty" eine sehr performante LUA-Umgebung in welcher man dynamischen Code entwickeln kann ohne auf C++ zurückgreifen zu müssen. Lua ist Geschmackssache aber sehr performant und beherrscht u.a. auch asynchrone Mysql-Queries.
 
Hi d4f,

ja ich hatte auch gegoogelt, bin aber nicht weiter gekommen.
StandardC++ habe ich wegen meines Moduls schon immer mit in dem Configure-Aufruf.
Hatte es hier nur vergessen zu erwähnen.

Danke für den Tipp, allerdings habe ich meine anderen Sachen alle in C++, unter anderem auch in diesem Modul, weil ich C++ mag.
Ich brauche jetzt halt nur noch die Funktionalität für die Datenbank.
 
allerdings habe ich meine anderen Sachen alle in C++, unter anderem auch in diesem Modul, weil ich C++ mag.
Mea culpa - es hat sich für mich gelesen als ob du erste Schritte mit C++ unter Nginx versuchst und das wäre komplexitätstechnisch eher ein Frustfaktor als Spass. Da dies hier nicht der Fall ist, einfach ignorieren ;)

StandardC++ habe ich wegen meines Moduls schon immer mit in dem Configure-Aufruf.
Irgendwas scheint da offensichtlich aber nicht zu stimmen - sonst würde er keine zur StandardLib gehörenden Symbolbeschwerden ausgeben.
Ich nehme mal an dass das Modul als getrennte .so vorliegt, was sagt ldd denn zum Linking-Status und den referenzierten Libraries?

Ggf kann ein strace auf den Nginx-Start auch weitere Informationen zutage fördern.
 
Configure guckt aber nur nach der Lib, nicht nach den Headern (Source), aber Letztere benötigst Du zum Kompilieren.
Bei Configure gibt man ja ggf. auch einen Include-Pfad mit "--with-cc-opt" an.
Aber wie gesagt, kompilieren geht ja ohne Probleme.

ldd und strace haben mir jetzt auf den ersten Blick auch nicht genauer helfen können.
Allerdings habe ich das Problem gefunden.
Beim erweitern des Configure-Aufrufs mit
Code:
--with-cc-opt="-I/test/mariadb/include" --with-ld-opt="-L/test/mariadb/lib" --add-dynamic-module=ttt
habe ich doch glatt den weiter vorne bei den Configure-Parametern angegebenen "--with-cc-opt=-lstdc++" vergessen.
Die Zusätze bzgl. MariaDB habe ich depp einfach ans Ende des Aufrufs gesetzt, so dass ich nun folgendes hatte:
Code:
-- with-cc-opt=-lstdc++ ... ... ... --with-cc-opt="-I/test/mariadb/include" --with-ld-opt="-L/test/mariadb/lib" --add-dynamic-module=ttt

Ich vollhonk hab es einfach nicht gesehen/beachtet.
Das hat wohl dazu geführt, das "-lstdc++" nicht berücksichtigt wurde.

Man man man...
Hab gefühlt vor lauter Bäumen den Wald nicht gesehen, sorry.

Trotzdem danke für eure Antworten.
 
  • Like
Reactions: d4f
Back
Top