我在這裏面臨一個奇怪的問題,我試圖將libkml C++ project sources整合到我的iOS項目中。該項目編譯獨立罰款,但是當涉及到通過該行的代碼鏈接:未找到適用於i386體系結構的符號 - 但適用於iOS設備
kmldom::PointPtr appPoint = kmlconvenience::CreatePointLatLon(appLocation.coordinate.latitude, appLocation.coordinate.longitude);
我得到的鏈接錯誤只有當我建立它模擬器。它正常工作時,我建立它的iOS設備,但對於模擬器我得到了以下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)
我可能是罰款與單獨的設備開發,但我期待解決這個問題問題有兩個原因:
- 對於開發目的,團隊可以很容易地使用模擬器。
- 我真的很想深入瞭解它,並理解爲什麼會在第一種情況下發生。爲什麼它針對設備構建,並且對於模擬器失敗,儘管目標是相同的,目標中包含的源文件在模擬器以及設備?中是相同的。
GXTimeStamp和GXTimeSpan類的定義是在頭文件gx_timeprimitive.h這就是內容:
#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__
我看了很多帖子說怎麼把源文件編譯沒有出現鏈接錯誤。我也在同樣的思路解決這個問題,但是我不能將這個頭文件包含到編譯源文件中,因爲它是一個.h文件。
另外,我仔細檢查了 - kml_factory.cc文件包括在內部項目的編譯來源:
期待的建議和幫助。謝謝。
您正在使用什麼版本的Xcode? –
我正在使用4.6.2 –