Я собираю статическую библиотеку с 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()
Похоже, что действительно не работает включение библиотеки, собранной с выпуском, в отладочную сборку моего приложения. Есть ли обходной путь, чтобы это исправить? Или есть другие идеи, как отлаживать основное приложение и по-прежнему запускать библиотеку со «скоростью сборки релиза»?