Как разрешить замену существующих методов во время соединения с Xcode? Используете ar -r вместо libtool? - PullRequest
0 голосов
/ 22 марта 2011

У нас есть некоторый код, который прекрасно компилируется в Mac OS X с g ++ с использованием make-файлов, но я не могу собрать его успешно с Xcode.

Вот краткий обзор настроек проекта, есть примеры следующего:

  1. libA.a

    • содержит myclass_stub.cpp, который реализует func ()
    • Наши make-файлы упаковывают библиотеку с помощью 'ar -r', которая позволяет заменять существующие методы.
    • Xcode будет использовать libtool для упаковки
  2. program.exe содержит myclass.cpp, который реализует func () какЧто ж.и связывает libA.a статически, используя g ++

Если бы я собирал libA.a и program.exe с Xcode, он жаловался на функцию «Duplicate symbol» в myclass_stub.o и myclass.o во время ссылки.

Я также попытался скомпилировать program.exe с Xcode и связать его с libA.a, который был упакован с 'ar -r', но он по-прежнему жалуется на дублирующийся символ.

Наличие дублированной реализации может быть не идеальным, но сейчас я не могу обойти это.Если бы я мог получить код для сборки из make-файлов, используя стандартные 'ar' и 'g ++', я хотел бы знать, какие параметры мне нужно установить в Xcode, чтобы он работал.

Теперь мои вопросы:

  1. Я бы хотел использовать ar -r для упаковки библиотеки в Xcode.Является ли это возможным?Если так, то как?Есть ли аналогичная опция с libtool, где я могу принудительно заменить существующие символы?

  2. Я полагаю, что разница между libtool и 'ar -r' может не быть основной разницей между сборкой с Xcodeи с make-файлами.У меня есть те же флаги компилятора, но список входных / объектных файлов, скорее всего, в другом порядке.Видите ли вы какие-либо другие возможные решения этой ошибки компоновки?

Я видел связанный с вопросом @ libtool vs ar для создания статической библиотеки (компоновщик xcode) ,но не решение

Кстати, я также пытался добавить all-load и --force-load, но, похоже, они мало что делают, так как я просто пытаюсь собрать для x86_64.

1 Ответ

0 голосов
/ 22 марта 2011

Я ничего не знаю о xcode, но задумывались ли вы об использовании слабых символов (в g ++: атрибут ((слабый))) для символов, которые должны быть переопределены?

...