Связывание статических библиотек clang независимо от порядка

В GCC я могу использовать флаги компоновщика -Wl,--start-group а также -Wl,--end-group решить проблемы с библиотеками, имеющими циклические зависимости. Я хотел бы сделать то же самое с Clang, но кажется, что эта функция была упал в lld версии 3.2. Как мне это сделать?

6

Решение

заметки о выпуске LLVM 3.2 утверждают, что

llvm-ld и llvm-stub были удалены, функциональность llvm-ld может быть частично заменена на llvm-link | выбрать | {ооо | as, llc -filetype = obj} | или полностью заменен на Clang.

По умолчанию Clang использует системный компоновщик. То есть в Linux, например, он использует GNU ld:

$ clang --version
clang version 3.2 (branches/release_32 170558)
...
$ clang -Wl,--verbose
GNU ld (GNU Binutils; devel:gcc / openSUSE_12.3) 2.24.0.20140403-196
...

Это говорит о том, что вы можете использовать -Wl, — start-group и -Wl, — end-group, как с GCC.

4

Другие решения

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

$(CC) -o myApp -lfoo -lbar -lfoo

Я не знаю, работает ли это с Clang, но это может стоить того.

Лучшим решением будет удаление циклических зависимостей, так как это создаст вам больше проблем в будущем.

3

У меня была похожая проблема при связывании с пользовательским компилятором clang с использованием проекта QT c ++.

Проблема оказалась в том, что QT использовал clang (компилятор c), а не clang ++ (компилятор c ++). Определив компилятор как clang ++ вместо clang в проекте QT (установка QMAKE_CXX = clang ++), проект успешно связался.

Насколько я понимаю, то же самое относится и к gcc и g ++.

0
По вопросам рекламы [email protected]