MSVC: ссылка с использованием внешнего файла PDB для статической библиотеки - PullRequest
0 голосов
/ 26 марта 2019

Мне известно о Как создать ссылку с помощью внешнего pdb? , но принятый ответ на этот вопрос не дает мне никакой полезной информации.

Я предварительно скомпилировалFLTK в коллекцию статических файлов библиотеки .lib, так что она может использоваться любым количеством проектов в моем хранилище.В настоящее время я пытаюсь использовать его в проекте, скомпилированном для Windows, с помощью компилятора MSVC, в командной строке (поэтому нет необходимости настраивать параметры проекта Visual Studio).

Проект компилируется и работает нормально,но я хотел бы избавиться от предупреждений, которые выдаются при связывании:

fltkd.lib(scandir.obj) : warning LNK4099: PDB 'fltk.pdb' was not found with 'fltkd.lib(scandir.obj)' or at 'C:\my_executable_path\fltk.pdb'; linking object as if no debug info

По сути, все, что я хочу сделать, это указать компоновщику на папку, в которой находится fltk.pdb.В настоящее время я храню его в той же папке, что и fltk.lib, и предполагал, что компоновщик найдет его при получении библиотеки, но это не так.Я хотел бы избежать копирования .pdb в выходной каталог исполняемого файла, если это возможно, потому что это усложнит мои сценарии сборки - я хотел бы просто позволить инструментам компиляции обрабатывать то, что заканчивается в build выходная папка.

Можно ли как-нибудь указать путь к компоновщику?Я пробовал /PDBALTPATH вариант, но он не работал;Я думаю, что это может быть использовано для создания оригинального .pdb, а не ссылки на существующий.Я также взглянул на многословные ссылки, но, похоже, это спамит меня сообщениями о том, где живут сами символы, и не дает никакой информации о том, как используется файл .pdb.

РЕДАКТИРОВАТЬ: Для получения дополнительной информации я использую Visual Studio Community 2017 (и инструменты компилятора командной строки, которые поставляются с ним, где это уместно).Я создал FLTK для x64 с помощью диспетчера конфигурации Visual Studio для создания новой платформы решений (x64) из существующей (Win32).Настройки компиляции для FLTK следующие:

/FR"x64\Debug\" /GS /W1 /Zc:wchar_t /I"." /I"..\..\zlib" /I"..\..\png"
/I"..\..\jpeg" /I"../.." /Zi /Gm- /Od /Fd"x64\Debug\fltk.pdb" /Zc:inline
/fp:precise /D "_CRT_SECURE_NO_DEPRECATE" /D "FL_LIBRARY" /D "WIN32"
/D "_DEBUG" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN"
/D "WIN32_EXTRA_LEAN" /D "_VC80_UPGRADE=0x0710" /errorReport:prompt
/WX- /Zc:forScope /Gd /MDd /FC /Fa"x64\Debug\" /EHsc /nologo
/Fo"x64\Debug\" /Fp"x64\Debug\fltkd.pch" /diagnostics:classic

И настройки ссылки:

/OUT:"..\..\lib\fltkd.lib" /MACHINE:X64 /NOLOGO

Это действительно генерирует fltk.pdb в x64\Debug вместе с .pdbфайлы для нескольких зависимых проектов (PNG, JPEG, ZLIB, fltkdlld).Вероятно, следует отметить, что, если я скомпилирую все другие примеры приложений, которые поставляются с FLTK, они также выдают предупреждения о связывании PDB, но только под x64.

Я скопировал все .libs в отдельную папку дляиспользовать с моим C ++ проектом, который использует систему сборки Waf.Для сборки проекта я использую флаги компиляции:

/MDd /EHsc /ZI /FS

А для компоновки:

/DEBUG:FASTLINK
/MACHINE:X64

Путь к lib (обнаруженный Waf во время настройки) также передается,и файл .pdb существует в том же каталоге, что и файл .lib.

...