我有一个使用rapidjson的项目,它在OS X上用cmake和Xcode编译得很好。
我很困惑为什么我得到以下未定义的引用错误(德语输出,“Nicht definierter Verweis auf”表示“未定义引用”:
../libraries/hdm-concave-lib/build/libhdm-concave-lib.a(geojson2pointcloud.cpp.o): In Funktion `hdm::concave::Geojson2PointCloud::toPointCloud(std::string, double)':
geojson2pointcloud.cpp:(.text+0xb4a): Nicht definierter Verweis auf `GeojsonParser::parseGeometry(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >&)'
collect2: error: ld returned 1 exit status
hdm-concave/CMakeFiles/hdm-concave.dir/build.make:96: die Regel für Ziel „hdm-concave/hdm-concave“ scheiterte
make[2]: *** [hdm-concave/hdm-concave] Fehler 1
CMakeFiles/Makefile2:85: die Regel für Ziel „hdm-concave/CMakeFiles/hdm-concave.dir/all“ scheiterte
make[1]: *** [hdm-concave/CMakeFiles/hdm-concave.dir/all] Fehler 2
Makefile:83: die Regel für Ziel „all“ scheiterte
make: *** [all] Fehler 2
相关方法的标题如下所示:
class GeojsonParser
{
public:
...
bool parseGeometry(rapidjson::Value& geometry);
}
实施是这样的:
bool GeojsonParser::parseGeometry(rapidjson::Value &geometry) {
_isGeometryCollection = false;
bool res = parseFeatureType(geometry);
return res;
}
如果我用_parser.parseGeometry注释掉这一行,项目会成功编译和链接(当然程序没有做任何有用的事情)。
for (Value::ValueIterator itr = features.Begin(); itr != features.End(); ++itr) {
if (!itr->HasMember("geometry")) continue;
if (itr->HasMember("geometry")) {
Value& geomVal = (*itr)["geometry"];
_parser.parseGeometry(geomVal); // <-- linker error here
}
}
我没有看到任何我做错的事,但我怀疑这与我无法获得的rapidjson有关。你有没有遇到同样的问题,知道如何解决它?