Sto affrontando uno strano problema qui, sto cercando di integrare lo libkml C++ project sources nel mio progetto iOS. Il progetto compila autonomamente bene, ma quando si tratta di collegare attraverso questa riga di codice:Simboli non trovati per l'architettura i386 - Ma funziona per il dispositivo iOS
kmldom::PointPtr appPoint = kmlconvenience::CreatePointLatLon(appLocation.coordinate.latitude, appLocation.coordinate.longitude);
ricevo errori del linker Solo quando sto costruendo per simulatore. Funziona bene quando costruire per dispositivi iOS, ma per simulatore di I ottenere gli errori del linker seguenti 3:
(null): "kmldom::GxTimeSpan::GxTimeSpan()", referenced from:
(null): Kmldom::KmlFactory::CreateGxTimeSpan() const in libLibKML.a(kml_factory.o)
(null): "kmldom::GxTimeStamp::GxTimeStamp()", referenced from:
(null): Kmldom::KmlFactory::CreateGxTimeStamp() const in libLibKML.a(kml_factory.o)
(null): Symbol(s) not found for architecture i386
(null): Linker command failed with exit code 1 (use -v to see invocation)
potevo andare bene con lo sviluppo per il dispositivo da soli, ma sto cercando di risolvere questo problema problema per 2 motivi:
- Sarebbe facile per il team utilizzare il simulatore a volte per scopi di sviluppo.
- Voglio davvero arrivare fino in fondo e capire perché questo sta accadendo nel primo caso. Perché costruisce per il dispositivo e fallisce per il simulatore sebbene il target sia lo stesso ei file di origine inclusi nella destinazione siano gli stessi per il simulatore e per il dispositivo ?.
La definizione delle classi e GXTimeStamp GXTimeSpan sono nel file di intestazione gx_timeprimitive.h e questo è il contenuto:
#ifndef KML_DOM_GX_TIMEPRIMITIVE_H__
#define KML_DOM_GX_TIMEPRIMITIVE_H__
#include <string>
#include "kml/base/xml_namespaces.h"
#include "kml/dom/kml22.h"
#include "kml/dom/object.h"
#include "kml/dom/timeprimitive.h"
namespace kmldom {
class Serializer;
class Visitor;
// <gx:TimeSpan>
class GxTimeSpan : public TimeSpan {
public:
virtual ~GxTimeSpan();
static KmlDomType ElementType() {
return Type_GxTimeSpan;
}
virtual KmlDomType Type() const { return Type_GxTimeSpan; }
virtual bool IsA(KmlDomType type) const {
return type == Type_GxTimeSpan || TimeSpan::IsA(type);
}
// Visitor API methods, see visitor.h.
virtual void Accept(Visitor* visitor);
private:
friend class KmlFactory;
GxTimeSpan();
LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTimeSpan);
};
// <gx:TimeStamp>
class GxTimeStamp : public TimeStamp {
public:
virtual ~GxTimeStamp();
static KmlDomType ElementType() {
return Type_GxTimeStamp;
}
virtual KmlDomType Type() const { return Type_GxTimeStamp; }
virtual bool IsA(KmlDomType type) const {
return type == Type_GxTimeStamp || TimeStamp::IsA(type);
}
// Visitor API methods, see visitor.h.
virtual void Accept(Visitor* visitor);
private:
friend class KmlFactory;
GxTimeStamp();
LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTimeStamp);
};
} // end namespace kmldom
#endif // KML_DOM_GX_TIMEPRIMITIVE_H__
Ho letto molti post che si verificano errori del linker coz i file di origine non vengono compilati . Stavo pensando alle stesse linee per risolvere anche questo problema, ma non posso includere questo file di intestazione in fonti compilate perché è un file .h.
Inoltre, ho controllato due volte - il file kml_factory.cc è incluso nelle fonti di compilazione del progetto interno:
Guardando al futuro per suggerimenti e aiuto. Grazie.
Quale versione di XCode stai usando? –
Sto usando 4.6.2 –