Как построить динамические (общие) библиотеки crashpad?

Crashpad - это система сообщений об ошибках для приложений на C++. https://chromium.googlesource.com/crashpad/crashpad/+/HEAD/doc/developing.md

инструкции по сборке

 $ cd ~/crashpad/crashpad
 $ gn gen out/Default
 $ ninja -C out/Default

Я могу создать предопределенные статические библиотеки, но я не нашел способа использовать gn или же ninja генерировать общие библиотеки.

1 ответ

Решение

После того, как вы сгенерируете файлы ниндзя, для каждого файла ниндзя найдите переключатель /MTd (отладка) или /MT (версия выпуска) и измените его на /MDd или / MD, чтобы создавались динамические библиотеки

затем вы можете создать crashpad с помощью ninja, на выходе по-прежнему будут файлы lib, поэтому они будут включены в exe-файл, когда вы свяжете их с вашим проектом (вам не нужно добавлять их в ваш проект, используя dll).

После запуска gn gen out\DefaultВы можете редактировать out\Default\toolchain.ninja файл для добавления дополнительных флагов компилятора в команду для cc а также cxx правила.

rule cc
  command = ninja -t msvc -e environment.amd64 -- cl.exe ... ${cflags} ${cflags_c} /c ...
                                 add the /MD compiler flag after the others, here ^

Ответ @bobbyg603 - это почти то, что мне нужно.

Но, как обычно, вещи не пишутся от руки, а встроены в скрипт, поэтому открытие редактора для изменения вещей часто совсем не полезно. Программно вы также можете использовать:

gn gen out\Default --args="extra_cflags=\"/MD\""

Кстати, это также изменит аргументы для cxx.

Сегодня мы еще раз взглянули на это. Если ты бежишьgn args --list out\Default вы заметите следующее:

extra_cflags
    Current value (from the default) = ""
      From //third_party/mini_chromium/mini_chromium/build/BUILD.gn:50

    Extra flags passed to the C compiler.
    Space-separated string of flags.
    "cflags" are passed to all invocations of the C, C++, Objective-C, and
    Objective-C++ compilers.

Чтобы добавить /MDd флаг для запуска конфигурации сборки gn args out\Default и добавить extra_cflags="/MDd" в конфигурацию сборки.

Другие вопросы по тегам