C++ Linker Fehler und keine Lösung in Sicht Boost/Urdl

drunken.panda

Captain
Registriert
Juli 2008
Beiträge
3.916
Seruvs,

ich schreibe gerade ein Programm und das hat vorher auch geklappt, solange alles in einer cpp Datei war.

Nun wollte ich aber einige Methoden in externe Klassen bzw in eine andere cpp Datei ausgliedern, was an sich auch geklappt hat.

Ich nutze die Bibliotheken Boost/Urdl zum Url lesen.

Nun habe ich alle Includes in die stdafx.h file gepackt und diese Headerfile in beide cpp Dateien eingebunden. Somit sollten ja alle Bibliotheken in beiden cpp Dateien eingebunden sein?


Nur leider bekomm ich den Fehler
error LNK1104: Datei "liburdl-gd.lib" kann nicht geöffnet werden.
Ich stieß auf die Webseite http://think-async.com/Urdl/doc/html/urdl/getting_started/building.html gestoßen.

Naja option zwei und drei klappen nicht.

Im übrigen sind die Bibliotheken wie in Option zwei beschrieben in dem funktionstüchtigen Programm eingebunden.

Seit der Trennung der Funktionen in zwei cpp Dateien bekomm ich diesen Linker Fehler nicht mehr raus.

Ich stell euch mal meine stafx.h File an, umd evtl Includefehler aufzudecken.



Code:
// stdafx.h : Includedatei für Standardsystem-Includedateien
// oder häufig verwendete projektspezifische Includedateien,
// die nur in unregelmäßigen Abständen geändert werden.
//


#pragma once
#define _CRT_SECURE_NO_WARNINGS




#include <urdl\istream.hpp>
#include <boost\thread\thread.hpp>


#include <boost\program_options.hpp>




#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define URDL_DISABLE_SSL 1
#define URDL_HEADER_ONLY 1


#include "targetver.h"


#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <vector>
#include <fstream>


#define XML_STATIC
#include <expat/expat.h>








#ifdef XML_STATIC
#pragma comment(lib,"libexpatMT.lib")
#else
#pragma comment(lib,"expat.lib")
#endif
// TODO: Hier auf zusätzliche Header, die das Programm erfordert, verweisen.


const double pi = 3.1415926535897;

Weitere Klassen die die stdafx.h einbinden.

Code:
// TileMapTest.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.//


#include "stdafx.h"
#include "SphericalMercatorTiles.h"








namespace po = boost::program_options;






std::string bbInhalt;
std::string poiInhalt;
std::string xlmLocation;
std::string  location;




std::vector<double> bb;
std::vector<std::vector<double>> poi;


po::variables_map vm;




const std::string defaultURL = "http://nominatim.openstreetmap.org/search?format=xml&polygon=1&adressdetails=1&q=";
.
.
.
.
(Methoden)

CPP Datei mir ausgelagerten Funktionen:

Code:
#include "stdafx.h"#include "SphericalMercatorTiles.h"






uint16_t ausdehnungX = 10;
uint16_t ausdehnungY = 10;
short zoom = 20;


std::string bb;
.
.
.
​ (Methoden)

Könnte es an der Reihenfolge der Includes liegen? Ist die wichtig?
 
Zuletzt bearbeitet:
Du musst URDL_NO_LIB=1 in den Projekt-Einstellungen definieren (irgendwo unter dem Punkt C/C++ müsste es die Präprozessordefinitionen geben), nicht in den Dateien selbst. Das gilt auch für XML_STATIC und ggf. weitere Definitionen. Oder du schreibst das immer vor die includes der jeweiligen Header. Ist aber nicht so schön, in jeder Datei alle Header einzubinden, wenn sie nicht benötigt werden, das ändert zwar nichts am Programm selbst, aber das Kompilieren und Linken dauert länger.
 
Zuletzt bearbeitet:
Jetzt bekomm ich

error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl createXmlFile(void)" (?createXmlFile@@YAXXZ)" in Funktion "__catch$_wmain$0".


error LNK1120: 1 nicht aufgelöste Externe 1 1 TileMapTest

Habe alle defines in die Präprozessor Optionen geschrieben..

Okay auch der Fehler ist behoben, war ein Fehler in der Syntax.
 
Zuletzt bearbeitet:
Zurück
Oben