GH-Unit и цель C ++ - PullRequest
       21

GH-Unit и цель C ++

3 голосов
/ 12 ноября 2009

У меня есть проект iPhone, который использует GHUnit для проведения модульного тестирования. Недавно мне пришлось реализовать комплексные числа и перегрузить некоторые операторы, чтобы упростить расчет БПФ. Цель состояла в том, чтобы создать чистый способ выполнения FFT без дополнительных затрат на все возможные функции, которые используются библиотеками, такими как FFTW, и в этом смысле я мог бы дополнительно настроить количество вычислений, которые я хотел бы выполнить в моем FFT ( поэтому я уменьшаю сложность факторизации того или иного, используемого в традиционном ДПФ).

Короче говоря, именно поэтому я решил реализовать свою собственную библиотеку FFT на C ++, а не использовать FFTW. Однако это вызвало некоторые проблемы с GHUnit. Все мои производственные цели работают правильно с интеграцией моей библиотеки FFT, но GHUnit отказывается работать. В частности, я получаю ошибки компоновщика с такими вещами, как GHComposeString. Это происходит только в моей цели модульных тестов. Мне интересно, что это за проблема? Сначала я подозревал, что это может быть из-за различий в C + C ++ в том, как искажаются имена функций, но, похоже, это не влияет на остальную часть проекта, только на части GHUnit.

Любая помощь в смешивании C ++ с GHUnit приветствуется.

Ответы [ 4 ]

0 голосов
/ 15 апреля 2011

Добавьте -lstdc++ в "Другие флаги компоновщика" в вашей цели тестирования.

0 голосов
/ 11 февраля 2011

Вы упаковываете свой GHUnit включает в себя extern "C" ?

Это предотвратит их изуродование.

В идеале, их заголовки должны предлагать это внутренне, но не каждый думает, что их заголовки используются в C ++:

#ifdef __cplusplus
extern "C" {
#endif

...// other content here

#ifdef __cplusplus
}  // end of scope of extern "C"
#endif
0 голосов
/ 15 апреля 2011

Одна (связанная) вещь, которая укусила меня в прошлом, заключается в том, что файлы .m (по умолчанию) компилируются как Obj-C, а файлы .mm - как Obj-C ++.

Это применимо, когда вы смешиваете два (Obj-C (++) и cpp), что, вероятно, так и есть, если вы занимаетесь разработкой для iPhone (в iOS).

Дважды проверьте, чтобы ваши тестовые файлы Obj-C, использующие ваш класс FFT, имели расширение .mm, а не расширение .m.

0 голосов
/ 21 ноября 2009

Это на самом деле не ответ, но я думаю, что вы на правильном пути с названием искажения. Манглинг делается во время соединения. GHUnit, который наследуется от OCUnit, внедряется в область памяти приложения во время выполнения dyld. Так что, возможно, могут быть какие-то проблемы с GHUnit / OCUnit, касающиеся искажения ваших файлов Obj-C ++.

...