проблема связывания моего класса C ++ с моей статической библиотекой C .a на iphone xcode - PullRequest
0 голосов
/ 10 сентября 2010

У меня проблема со связью со статической библиотекой .a C, которую я скомпилировал как отдельную цель.

Моя библиотека называется libtest.a и имеет только одну функцию: int test (), которая всегда возвращает 1. Я поместил libtest.a и test.h (его заголовочный файл) в mylibrary_directory

Затем я создаю новый базовый проект iphone view и добавляю mylibrary_directory в путь поиска библиотеки, путь поиска заголовка и пути поиска заголовков пользователей в xcode. Также я добавил флаг -ltest в опции других флагов компоновщика.

Когда я выполняю вызовы test () в myProjectViewController.m, он РАБОТАЕТ

- (void)viewDidLoad {
   [super viewDidLoad];
   test();
   }

Пока все хорошо. Но проблема возникает, когда я создаю новый класс C ++ в своем проекте, делая вызовы test (). Затем компоновщик жалуется, что символ _test () не найден и projetc НЕ создается.

myClass.h:

#import "test.h"

class myClass
{
 int testCall();

}

myClass.mm:

int myClass::testCall()
{
  return test();
}

Я получаю:

Неопределенные символы:

  "test()", referenced from:
      myClass::testCall()     in myClass-64D20670AC6C3193.o
   ld: symbol(s) not found
   collect2: ld returned 1 exit status

Вывод команды Ld показывает правильные -ltest и -Lcorrect_paths

Я предполагаю, что мне не хватает некоторых флагов при компиляции библиотеки или в myProject. Есть идеи или помощь?

Спасибо

Баба.

1 Ответ

2 голосов
/ 10 сентября 2010

С ++, искажение имен, возможно, вас заинтересует.Убедитесь, что вы отметили свои объявления test() extern "C" везде, где C ++ их видит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...