Большой файл заголовка данных в приложении iOS - PullRequest
0 голосов
/ 28 декабря 2011

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

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

Есть идеи, как решить эту проблему с минимальным количеством модификаций кода WMM?

Спасибо

РЕДАКТИРОВАТЬ: Вот как я пытался разделить файлы:

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

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

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

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

Неопределенные символы для архитектуры armv7:
"__Z29WMM_TimelyModifyMagneticModel12WMMtype_DateP21WMMtype_MagneticModelS1_", ссылка от: - [Магнитная вариация путевой точки] в Waypoint.o "__Z23WMM_GeodeticToSpherical17WMMtype_Ellipsoid21WMMtype_CoordGeodeticP22WMMtype_CoordSpherical", ссылка от: - [Магнитная вариация путевой точки] в Waypoint.o "__Z26WMM_CalculateGridVariation21WMMtype_CoordGeodeticP27WMMtype_GeoMagneticElements", ссылка от: - [Магнитная вариация путевой точки] в Waypoint.o "__Z10WMM_Geomag17WMMtype_Ellipsoid22WMMtype_CoordSpherical21WMMtype_CoordGeodeticP21WMMtype_MagneticModelP27WMMtype_GeoMagneticElements от:" - [Магнитная вариация путевой точки] в Waypoint.o "__Z23WMM_AllocateModelMemoryi", на которую ссылаются из: - [Магнитная вариация путевой точки] в Waypoint.o "__Z22WMM_GeomagIntroductionP21WMMtype_MagneticModelPc", ссылка от: - [Магнитная вариация путевой точки] в Waypoint.o "__Z23WMM_robustReadMagModelsPcPP21WMMtype_MagneticModeli", ссылка от: - [Магнитная вариация путевой точки] в Waypoint.o "__Z9WMM_Errori", на которую ссылаются из: - [Магнитная вариация путевой точки] в Waypoint.o "__Z15WMM_SetDefaultsP17WMMtype_EllipsoidP21WMMtype_MagneticModelP13WMMtype_Geoid", ссылка от: - [Магнитная вариация путевой точки] в Waypoint.o ld: символ (ы) не найден для архитектуры armv7 clang: error: сбой команды компоновщика с код выхода 1 (используйте -v для просмотра вызова)

1 Ответ

4 голосов
/ 28 декабря 2011

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

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

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


РЕДАКТИРОВАТЬ: Ваши неудачные символы не имеют ничего общего с GeoidHeightBuffer. Похоже, вы не связываете код, который предоставляет WMM_TimelyModifyMagneticModel() и его друзья. Они выглядят как искаженные в C ++. Вы компилируете код C с помощью компилятора C ++ без использования extern "C" {}?

...