Как скомпилировать статическую библиотеку?(эквивалент "-static-lib ..."?) - PullRequest
1 голос
/ 12 ноября 2011

Я использую VS2010 и У меня есть проект C ++, который ссылается и использует внешнюю библиотеку C (dll), имея различные записи в разделах VC ++ Directories и Linker свойств проекта.

Сейчас мой проект строится, но когда он запускается, появляется сообщение:

Программа не может запуститься, так как ExternalCLibrary.dll отсутствует на вашем компьютере. [...]


Я хотел бы знать, как сделать в Visual Studio 2010 эквивалент

добавление "-static-libgcc -static-libstdc++" к вашим флагам компилятора.

Кажется, это решение в соответствии с: Программа не может запуститься, потому что отсутствует libgcc_s_dw2-1.dll

Ответы [ 4 ]

2 голосов
/ 12 ноября 2011
  1. Загрузка проекта в Visual Studio.
  2. Щелкните правой кнопкой мыши свой проект и выберите «Свойства».
  3. Найдите часть дерева «Линкер» в дереве.
  4. Выберите «Все конфигурации» и «Все платформы» в раскрывающихся меню в верхней части диалогового окна.
  5. Поместите дополнительные зависимости статической библиотеки в поле Ввод -> Дополнительные зависимости , разделенные точкой с запятой.
  6. Если библиотеки не находятся в вашем пути поиска lib, введите соответствующие записи в поле Общие -> Дополнительные каталоги библиотеки , разделенные точкой с запятой.
  7. Применить, сохранить, скомпилировать, беги.
0 голосов
/ 16 апреля 2017

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

#ifdef __cplusplus
extern "C" {
#endif

// C functions

#ifdef __cplusplus
}
#endif

Как только вы это сделаете, скомпилируйте библиотеку в статическую библиотекуar rcs [YOUR OBJECT FILES].Последнее, что нужно сделать, это использовать компилятор c ++, который связывает библиотеку с объектными файлами из вашего проекта.Теперь флаги необходимы для связи библиотеки.

0 голосов
/ 12 ноября 2011

Два флага, переданные gcc в соответствии с вашим вопросом, говорят gcc статически связать библиотеку времени выполнения с исполняемой или общей библиотекой / dll. Это вряд ли проблема с вашей проблемой, поскольку часть сообщения об ошибке, которое вы цитировали, предполагает, что ExternalCLibrary.dll не собирается должным образом.

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

Если ExternalCLibrary.dll не существует, вам нужно выяснить, откуда вы должны его получить, но если ваш проект создается и он указан в проекте как зависимость, то я предполагаю, что это проблема Загрузчик не может найти зависимость этой DLL во время выполнения.

0 голосов
/ 12 ноября 2011

Вы не можете использовать dll в качестве статической библиотеки (именно поэтому они называются динамически подключаемой библиотекой). Для того, чтобы скомпилировать статическую библиотеку, вы будете исходный код этой библиотеки. Получив исходный код, перейдите в настройки проекта, General->Configuration Type и установите его на Static Library(.lib). Затем в вашей программе вам нужно будет добавить эту библиотеку, указав имя библиотеки в Linker->Input->Additional Dependencies

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...