Повторяющиеся символы при связывании со статической библиотекой C ++ Juce - PullRequest
0 голосов
/ 04 октября 2019

Я собираю статическую библиотеку с Juce, которую я хочу использовать в другом приложении Juce. Пока все работало нормально, но теперь я сталкиваюсь со следующей проблемой:

Когда я компилирую библиотеку в режиме выпуска и хочу ссылаться на нее при компиляции приложения Juce в режиме отладки, я получаю ошибку:

ld: 2116 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Дубликаты символов находятся в модулях Juce. Когда я компилирую и библиотеку, и приложение в выпуске, или оба в отладке, все работает нормально.

Однако есть причины иметь библиотеку в качестве сборки выпуска и компилировать приложение в отладке:

  • Библиотека выполняет некоторые тяжелые вычисления, и в качестве отладочной сборки она невероятно медленная.
  • В конечном итоге библиотека и содержащиеся в ней алгоритмы должны быть доставлены клиенту без возможности просмотра исходного кода. В качестве скомпилированной библиотеки отладки все равно можно было бы пройтись по коду с помощью отладчика.

Я работаю в Mac OS с использованием Xcode.

Как разрешить этот дублированный символПроблема?

С нетерпением ждем некоторых подсказок!

ОБНОВЛЕНИЕ:

Я исправил проблему с дублирующимися символами, явно исключив все модули juce при компиляции библиотеки (сняв флажок Целевое членствов Xcode). Но теперь я получаю еще одну ошибку при компиляции приложения в режиме отладки:

juce::this_will_fail_to_link_if_some_of_your_compile_units_are_built_in_release_mode::this_will_fail_to_link_if_some_of_your_compile_units_are_built_in_release_mode()

Похоже, что действительно не работает включение библиотеки, собранной с выпуском, в отладочную сборку моего приложения. Есть ли обходной путь, чтобы это исправить? Или есть другие идеи, как отлаживать основное приложение и по-прежнему запускать библиотеку со «скоростью сборки релиза»?

...