2011-12-27 1 views
0

Я пытаюсь включить код мировой магнитной модели, написанный на C, в приложение iOS. Он включает в себя файл заголовка 8.5M, который определяет массив с плавающей точкой с большим количеством элементов. Если я включаю его как есть, я получаю ошибки компоновщика о повторяющихся объектах, вероятно, потому, что заголовок включен несколько раз разными единицами компиляции, а массив float определен в файле заголовка. Это несколько ожидалось.Большой файл заголовка данных в приложении iOS

Я пробовал разделить это на h-файл и файл c и объявить массив float как extern, но это не сработало.

Любые идеи о том, как решить эту проблему с минимальными изменениями в WMM-коде?

Благодаря

EDIT: Это, как я пытался разбить файлы до:

// EGM9615.h file 
extern float GeoidHeightBuffer[]; 

// EGM9615.c file 
#include "EGM9615.h" 

float GeoidHeightBuffer[] = 
{1.2, 1.2, // lots more 
}; 

Это приводит к ошибкам компоновщика еще:

Undefined symbols for architecture armv7:
"__Z29WMM_TimelyModifyMagneticModel12WMMtype_DateP21WMMtype_MagneticModelS1_", referenced from: -[Waypoint magneticVariation] in Waypoint.o "__Z23WMM_GeodeticToSpherical17WMMtype_Ellipsoid21WMMtype_CoordGeodeticP22WMMtype_CoordSpherical", referenced from: -[Waypoint magneticVariation] in Waypoint.o "__Z26WMM_CalculateGridVariation21WMMtype_CoordGeodeticP27WMMtype_GeoMagneticElements", referenced from: -[Waypoint magneticVariation] in Waypoint.o "__Z10WMM_Geomag17WMMtype_Ellipsoid22WMMtype_CoordSpherical21WMMtype_CoordGeodeticP21WMMtype_MagneticModelP27WMMtype_GeoMagneticElements", referenced from: -[Waypoint magneticVariation] in Waypoint.o "__Z23WMM_AllocateModelMemoryi", referenced from: -[Waypoint magneticVariation] in Waypoint.o "__Z22WMM_GeomagIntroductionP21WMMtype_MagneticModelPc", referenced from: -[Waypoint magneticVariation] in Waypoint.o "__Z23WMM_robustReadMagModelsPcPP21WMMtype_MagneticModeli", referenced from: -[Waypoint magneticVariation] in Waypoint.o "__Z9WMM_Errori", referenced from: -[Waypoint magneticVariation] in Waypoint.o "__Z15WMM_SetDefaultsP17WMMtype_EllipsoidP21WMMtype_MagneticModelP13WMMtype_Geoid", referenced from: -[Waypoint magneticVariation] in Waypoint.o ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

+0

Просьба указать, какие ошибки возникли при изъятии данных из файла C. Это правильный путь. –

ответ

4

I've tried splitting that up into a h file and a c file and declaring the float array as extern, but that didn't work.

Тогда вы сделали это неправильно. Это правильный способ решить вашу проблему. Посмотрите еще раз на то, какие ошибки вы видели, когда разделили его таким образом.

Я предполагаю, что, когда вы говорите «дублирующие объекты», вы подразумеваете дубликаты идентификаторов во время ссылки, а не «объекты».


EDIT: неисправные символы не имеет ничего общего с GeoidHeightBuffer. Похоже, вы не связываете какой-либо код, предоставляющий WMM_TimelyModifyMagneticModel() и его друзьям. Кажется, что это C++ с именем. Вы компилируете C-код с помощью компилятора C++ без использования extern "C" {}?

+0

Повторяющийся символ, да, спасибо. Я буду обновлять свой вопрос тем, что я пробовал, до разделения файла. – Christoph

+0

Хороший улов на C++. Я использую Objective-C++ (.mm файлы). Он строит сейчас, поэтому, я думаю, это отвечает на этот вопрос. Благодаря! – Christoph

 Смежные вопросы

  • Нет связанных вопросов^_^