Librarysymbole

ChakaZulu
Developer
Beiträge: 457
Registriert: Sonntag 23. März 2003, 00:39

Librarysymbole

Beitrag von ChakaZulu »

Hi,

ich wollte gerade versuchen, die lib von fx2 für ein Spiel zu benutzen, und zwar sollte das C++-Klassen verwenden. Ich includiere also die Header, kompiliert auch alles.
Nur scheint meine game-library nicht richtig gelinkt worden zu sein, denn ich bekomme ein
undefined symbol: _Z13FBSetupColorsv[

Scheint auch nicht unlogisch zu sein, denn:

Code: Alles auswählen

mschuele@raphael:/opt/tuxbox/apps/tuxbox/plugins/fx2/trafficjam$ nm /opt/dbox2/cdkroot/lib/tuxbox/plugins/trafficjam.so |grep SetupColors
         U _Z13FBSetupColorsv

mschuele@raphael:/opt/tuxbox/apps/tuxbox/plugins/fx2/trafficjam$ nm /opt/dbox2/cdkroot/lib/tuxbox/plugins/sol.so |grep SetupColors
         U FBSetupColors

mschuele@raphael:/opt/tuxbox/apps/tuxbox/plugins/fx2/trafficjam$ nm /opt/dbox2/cdkroot/lib/tuxbox/plugins/libfx2.so|grep SetupColors
00002e78 T FBSetupColors
sol.so ist ein anderes Spiel, das auf herkömmliche Weise erstellt wurde.
Die Symbole in meiner C++-gamelib heissen also anders, liegt darin das Problem? Kann man das umgehen und wenn ja, wie?
Die Antwort, dass ich es einfach so machen soll, wie es "üblich" ist (kein C++), braucht ihr nicht schreiben ;)

thx,

ChakaZulu
Zwen
Developer
Beiträge: 867
Registriert: Mittwoch 14. August 2002, 19:50

Beitrag von Zwen »

So sollte es gehen....

extern "C" {
#include <foo.h>
}
ChakaZulu
Developer
Beiträge: 457
Registriert: Sonntag 23. März 2003, 00:39

Beitrag von ChakaZulu »

hi,

danke für die Hilfe, funktioniert :)

ich hatte nur den plugin-startcode in extern "C" geschrieben..

ciao,

ChakaZulu
quarks
Neugieriger
Neugieriger
Beiträge: 8
Registriert: Donnerstag 18. März 2004, 13:27

Beitrag von quarks »

Hi,

Das Problem kann übrigens auch auftreten wenn man die xxxx.cfg im DOS Format abspeichert.

Dann wird nämlich die libfx2.so erst gar nicht beim starten des Plugins geladen. Das Problem liegt darin das beim einlesen des cfg files bei \r\n bis \n gelesen wird und das \r aber im parm string verbleibt.


Code: Alles auswählen

	    
     getline(iss, cmd, '=');
     getline(iss, parm, '=');   //wieso eigentlich '=' ? :-)
damit es auch mit dem DOS Format klappt sollte es in

Code: Alles auswählen

	getline(iss, cmd, '=');
	getline(iss, parm, '\r');

geändert werden. Da iss zuvor als Zeile mit \n eingelesen wurde gibt es auch kein Problem mit Unix Format.

Leider gibt es keine Fehlermeldung das das laden der libfx2.so fehlgeschlagen ist. Grund:

Code: Alles auswählen

	for( i=0; i<argc; i++ )
	{
		std::string libname = argv[i];
		printf("[CPlugins] try load shared lib : %s\n",argv[i]);
		libhandle[i] = dlopen ( *argv[i] == '/' ?
			argv[i] : (PLUGINDIR "/"+libname).c_str(),
			RTLD_NOW | RTLD_GLOBAL );
-->>         if ( !libhandle )           <<--  solte if( !libhandle[i]) sein.
		{
			fputs (dlerror(), stderr);
			break;
		}
	}

Hab daran auch ein paar Stunden geknappert, weil ich den Fehler zuerst im Sourcecode bzw. Compiler/Linker gesucht hab.
quarks
Neugieriger
Neugieriger
Beiträge: 8
Registriert: Donnerstag 18. März 2004, 13:27

Beitrag von quarks »

Ganz vergessen zu schreiben das es sich dabei um die Datei apps/tuxbox/neutrino/src/gui/gamelist.cpp handelt