Problem mit LCGI

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Soeren288
Beiträge: 2
Registriert: Mi Mai 26, 2010 3:25 pm

Problem mit LCGI

Beitrag von Soeren288 » Mi Mai 26, 2010 3:43 pm

Hallo Community!

Vorerst, bin noch in C ein absoluter Neuling,
soll aber für die Schule ein Projekt vorzeigen, in welchem ich Werte aus einer Problemstellung in einem Diagramm darstellen soll.
Die Werte kann ich mir mittlerweile anzeigen lassen, weiß aber nicht wie ich diese (15 000) Werte in ein Diagramm bekomm.

Am besten wäre es in einem LCGI-Diagramm.
Hatte mir dafür testweise mal was runtergeladen, mit einem Beispielprogramm, welches ich aber nicht zum laufen bekomm.
-> Anfangs fehlten die lib's "odbc32.lib" und "odbccp32.lib" die ich aber nun mit "Microsoft SDK's" zugefügt habe.

Nun aber zeigt er mir folgende Fehler an (eine Doppelzuweisung?):

1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _exit ist bereits in LIBCMTD.lib(crt0dat.obj) definiert.
1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _vsprintf ist bereits in LIBCMTD.lib(vsprintf.obj) definiert.
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) ist bereits in LIBCMTD.lib(typinfo.obj) definiert.
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) ist bereits in LIBCMTD.lib(typinfo.obj) definiert.
1>LINK : warning LNK4098: Standardbibliothek "MSVCRT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
1>.\Debug/lcgi_app.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.


Würde mich über jeglichen Rat sehr freuen!
Soeren288

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Problem mit LCGI

Beitrag von cloidnerux » Mi Mai 26, 2010 3:51 pm

1>LINK : warning LNK4098: Standardbibliothek "MSVCRT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
Dein Linker sagt dir schon was du machen sollst:
Unter deinen Linkereinstellungen(Wie es aussieht arbeitest du mit Visual Studio Dort unter Projekt->Einstellungen->Linker) einfach /NODEFAULTLIB eingeben.

p.s: Willkomen im Forum.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit LCGI

Beitrag von Xin » Mi Mai 26, 2010 4:53 pm

Bin absolute LCGI Neuling, aber google sagt "Linux Common Grafik Interface"...
Du programmierst mit VC...?

Ich dachte schon das wäre was wie CGI in Light ^^
Aber das muss ich mir auch mal ansehen, wenn man damit schön zeichnen kann, kann ich das sicher auch für Übungen verwenden.
Guter Tipp für C-Tutorial-Remake.

PS: Von mir auch ein Willkommen und viel Spaß und Erfolg hier.

PSS: Zum Thema - wieso hast Du eigentlich die MS-Lib zusätzlich eingebunden?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Problem mit LCGI

Beitrag von cloidnerux » Mi Mai 26, 2010 5:21 pm

PSS: Zum Thema - wieso hast Du eigentlich die MS-Lib zusätzlich eingebunden?
Hat er nicht, macht VS Standardmäßig.
Desswegen das "/NODEFAULTLIB" ;)
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit LCGI

Beitrag von Xin » Mi Mai 26, 2010 5:31 pm

cloidnerux hat geschrieben:
PSS: Zum Thema - wieso hast Du eigentlich die MS-Lib zusätzlich eingebunden?
Hat er nicht, macht VS Standardmäßig.
<stirnklatsch>... Narf!
Ich habe MSVCRT.lib und MSVCR80.dll gerade mal so verstanden, dass beide eingebunden werden und nicht, dass das eine das andere referenziert.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Soeren288
Beiträge: 2
Registriert: Mi Mai 26, 2010 3:25 pm

Re: Problem mit LCGI

Beitrag von Soeren288 » Di Jun 01, 2010 8:17 am

Entschuldigt die längere Zeit bis zu diesem Post, gab leider nebenbei noch viel zu erledigen.
Nun konnt ich mich aber wieder vor kurzem dem Problem widmen und an der Stelle erstmal:
Vielen Dank für Eure zahlreichen Antworten!! :)

Habe dann also sofort unter "Eigenschaften" -> "Linker" -> "Eingabe" -> "Standardbibliotheken ignorieren" -> auf "Ja (/NODEFAULTLIB)" gestellt.
Und war anschliessend sehr erfreut, da meine alten Fehler nicht mehr erschienen sind. Dafür 20 neue. :|

Soweit ich es verstehe, stimmt glaube was nicht mit gewissen Links und mit "graphics.obj".
Muss allerdings dazu sagen dass das Programm an sich funktionsfähig ist, also am Quellcode kanns nicht liegen (Hab des aus dem Internet).

Folgende Fehlerausgabe erhalte ich beim Erstellen:

Code: Alles auswählen

1>------ Erstellen gestartet: Projekt: lcgi_app, Konfiguration: Debug Win32 ------
1>Verknüpfen...
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__RTC_CheckEsp" in Funktion ""void __cdecl draw_field(bool (* const)[64])" ?draw_field@@YAXQAY0EA@_N@Z)".

1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__RTC_Shutdown".
1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__RTC_InitBase".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_clock" in Funktion ""void __cdecl run_ant(bool (* const)[64],struct _Pos)" (?run_ant@@YAXQAY0EA@_NU_Pos@@@Z)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@_RTC_CheckStackVars@8" in Funktion ""void __cdecl run_ant(bool (* const)[64],struct _Pos)" (?run_ant@@YAXQAY0EA@_NU_Pos@@@Z)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__RTC_UninitUse" in Funktion ""void __cdecl run_ant(bool (* const)[64],struct _Pos)" (?run_ant@@YAXQAY0EA@_NU_Pos@@@Z)".

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "___security_cookie" in Funktion "_main".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "@__security_check_cookie@4" in Funktion "_main".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__chkstk" in Funktion "_main".
1>lcgi.lib(graphics.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__chkstk".
1>LINK : error LNK2001: Nicht aufgelöstes externes Symbol "_mainCRTStartup".

1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_strcmp" in Funktion ""protected: virtual void __thiscall MalFenster::initMetaObject(void)" (?initMetaObject@MalFenster@@MAEXXZ)".

1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)" in Funktion ""void __cdecl initgraph_(int,char * * const,int,int)" (?initgraph_@@YAXHQAPADHH@Z)".

1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)" in Funktion ""public: virtual void * __thiscall QApplication::`scalar deleting destructor'(unsigned int)" (??_GQApplication@@UAEPAXI@Z)".

1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_atan" in Funktion ""public: __thiscall MalFenster::MalFenster(int,int)" (??0MalFenster@@QAE@HH@Z)".

1>lcgi.lib(graphics.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__fltused".
1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__exit" in Funktion ""public: void __thiscall MalFenster::readySlot(void)" (?readySlot@MalFenster@@QAEXXZ)".

1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_sin" in Funktion ""private: void __thiscall MalFenster::paint(void)" (?paint@MalFenster@@AAEXXZ)".

1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_cos" in Funktion ""private: void __thiscall MalFenster::paint(void)" (?paint@MalFenster@@AAEXXZ)".

1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__ftol" in Funktion ""private: void __thiscall MalFenster::paint(void)" (?paint@MalFenster@@AAEXXZ)".

1>lcgi.lib(graphics.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__vsprintf" in Funktion ""char __cdecl getcharacter(char *,...)" (?getcharacter@@YADPADZZ)".

1>.\Debug/lcgi_app.exe : fatal error LNK1120: 20 nicht aufgelöste externe Verweise.
Und hier noch der Quellcode falls benötigt (sollt aber wie gesagt, eigentlich richtig sein):

Code: Alles auswählen

/************************************************************************************
 * Langtons Ameise
 * (C) Copyright 2002, Heiko Köhler
 *
 * Das Spiel erfand der Informatiker Christopher Langton (Langtons Ameise).
 * Das Spiel insgesamt stellt einen zellurären Automaten dar. Dabei handelt
 * es sich um ein Gitternetz von Schaltern, die unterschiedlich eingestellt
 * werden können. Entscheidend sind aber die Regeln für die Betätigung der
 * Schalter, also wie sich die Ameise zu bewegen hat und wie sich die Farben
 * der einzelnen Zellen dabei ändern:
 * 
 *        -Ist sie auf einer grauen Zelle, macht sie eine 90°-Wendung nach
 *         links.
 *        -Ist sie auf einer weiáen Zelle, macht sie eine 90°-Wendung nach
 *         rechts.
 *        -Beim Übergang zur nächsten Zelle ändert diejenige, auf der sie
 *         gerade ist, ihre Farbe von Weiß in Schwarz oder umgekehrt.
 *
 * Langtons Ameise wurde veröffentlicht in dem Buch "Chaos und Anti-Chaos
 * - Ein Ausblick auf die Wissenschaft des 21. Jahrhunderts" von
 * Jack Cohen und Ian Stewart (S. 274 - 276). Es erschien im Mai 1997 bei:
 * Deutscher Taschenbuch Verlag GmbH. & Co. KG , München.
 ************************************************************************************/

#include <time.h>
#include <graphics.h>
#include "main.h"


void draw_field( bool field[FIELD_WIDTH][FIELD_HEIGHT] )
{
	for(int x = 0; x < FIELD_WIDTH; x++)
		for(int y = 0; y < FIELD_HEIGHT; y++){
			if( field[x][y] )
				setfillstyle(SOLID_FILL, BLACK);
			else
				setfillstyle(SOLID_FILL, WHITE);
			bar(x*SQUARE_WIDTH, y*SQUARE_WIDTH, (x+1)*SQUARE_WIDTH, (y+1)*SQUARE_WIDTH);
		}
}

void init_field( bool field[FIELD_WIDTH][FIELD_HEIGHT] )
{
	for( int x = 0; x < FIELD_WIDTH; x++)
		for(int y = 0; y < FIELD_HEIGHT; y++)
			if( x >= RECT_START_WIDTH  && x <= RECT_END_WIDTH &&
				y >= RECT_START_HEIGHT && y <= RECT_END_HEIGHT )
					field[x][y] = true;
				else
					field[x][y] = false;
}

void redraw_square( bool field[FIELD_WIDTH][FIELD_HEIGHT], Pos pos, bool current_pos )
{
	if(current_pos)
		setfillstyle(SOLID_FILL, RED);
	else if( field[pos.x][pos.y] )
		setfillstyle(SOLID_FILL, BLACK);
	else
		setfillstyle(SOLID_FILL, WHITE);
	bar(pos.x*SQUARE_WIDTH, pos.y*SQUARE_WIDTH, (pos.x+1)*SQUARE_WIDTH, (pos.y+1)*SQUARE_WIDTH);
}

void run_ant( bool field[FIELD_WIDTH][FIELD_HEIGHT], Pos pos )
{
	Direction dir = LEFT;
	clock_t _clock;
	Pos prev_pos;
	unsigned long _time = 0;
	_clock = clock();
	// ermittel Größe von _time
	while( clock()-_clock < CLOCKS_PER_SEC/TIME_SLICE )
		_time++;
	for( int t = 0; t < STEPS; t++ ){
		// ist Ameise auf schwarzer Zelle 90° Wendung nach links
		// ist Ameise auf weißer Zelle 90° Wendung nach rechts
		for(int i = 0; i < _time; i++)
			;
		switch( dir){
		case UP:
			if( field[pos.x][pos.y] )
				dir = LEFT;
			else
				dir = RIGHT;
			break;
		case LEFT:
			if( field[pos.x][pos.y] )
				dir = DOWN;
			else
				dir = UP;
			break;
		case DOWN:
			if( field[pos.x][pos.y] )
				dir = RIGHT;
			else
				dir = LEFT;
			break;
		case RIGHT:
			if( field[pos.x][pos.y] )
				dir = UP;
			else
				dir = DOWN;
			break;
		}
		// dreht Ameise
		switch( dir ){
		case UP:
			pos.y--;
			break;
		case LEFT:
			pos.x--;
			break;
		case DOWN:
			pos.y++;
			break;
		case RIGHT:
			pos.x++;
			break;
		}
		// ändert Farbe von aktueller Zelle
		if( field[pos.x][pos.y] )
			field[pos.x][pos.y] = false;
		else
			field[pos.x][pos.y] = true;
		redraw_square(field, prev_pos, false);
		prev_pos = pos;
		redraw_square(field, pos, true);
	}
}

int main( int argc, char *argv[])
{	
	bool field[FIELD_WIDTH][FIELD_HEIGHT];
	Pos start_pos;

	start_pos.x = START_POS_X;
	start_pos.y = START_POS_Y;
	init_field(field);
	initgraph(FIELD_WIDTH*SQUARE_WIDTH, FIELD_HEIGHT*SQUARE_WIDTH);
	draw_field(field);
	run_ant( field, start_pos );
	getch();
	closegraph();
	return 0;
}
Würde mich wieder über Antworten freuen, insofern jemand eine Idee hat!
Gruß Soeren288


Edit by Xin: Code-Tags eingefügt
Edit by Xin, 2. Teil: Fettdruck über kompletten Post entfernt - Schreien ist nicht erforderlich ^^

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Problem mit LCGI

Beitrag von cloidnerux » Di Jun 01, 2010 12:07 pm

Es sieht so aus, als würde er versuchen, RTC-Assembler zu nutzen.
Versuche in der Kommandozeile des Linkers alles was mit /RTC beginnt zu löschen, aber vorher sicher den Orginalzustand.
Zu finden ist das wieder unter den Projekteinstellungen
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit LCGI

Beitrag von Xin » Di Jun 01, 2010 12:53 pm

sin, cos, vsprintf... das klingt für mich auch stark nach Abhängigkeiten zu bestimmten Standard-Libs, was bedeutet, dass einfach abschalten das Problem nicht löst ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Problem mit LCGI

Beitrag von fat-lobyte » Di Jul 13, 2010 9:19 am

Also die ersten Fehler waren definitiv besser als die letzteren :-)

MSVCRT.lib klingt für mich wie MSVC(Microsoft Visual Studio C/C++), Runtime und
LIBCMTD.lib klingt für mich wie Libc (also C-Bibliothek), Multithreaded.

MSVCRT sollte eigentlich die C-Standardbibliothek des Visual Studio sein, LIBC klingt für mich eher Linux/GCC-isch.

Kann es zufällig sein, dass du zwei C-Standardbibliotheken eingebunden hast?? Die fehler würden jedenfalls darauf hindeuten. Überprüf mal die Linker-Einstellungen des Projekts nach dingen die da nicht hingehören. Ich vermute LIBCMTD ist da irgendwie fehl am Platz...
Haters gonna hate, potatoes gonna potate.

Antworten