В настоящее время я предоставляю статическую библиотеку, использующую vs2008. Я занимаюсь созданием своей статической библиотеки. Однако, поскольку я использую другую статическую библиотеку, есть способ, которым я устанавливаю это как одну статическую библиотеку. Причина в том, что они будут вызывать функции в моей библиотеке, которые зависят от этой другой статической библиотеки (.lib). Я не уверен, как это сделать и вам нужна помощь.две статические библиотеки
ответ
Вот один из способов:
- Найти все объектные файлы в статической библиотеке. Это можно сделать, выполнив команду
lib STATICLIB /list
- Извлечь каждый из перечисленных объектов. Вы должны дать точное название, начиная с шага 1 (
lib STATICLIB /extract:.\debug\foo.obj
) - Вы можете добавить все объекты, выделенные формы шаг 2 в библиотеку
Посмотрите объекты проекта | Свойства конфигурации | Библиотекарь | Общие
Поместите имя библиотеки (.lib) файл, который вы хотите добавить в свою библиотеку в разделе «Дополнительные зависимостей»
Вы можете также установить «дополнительные каталоги библиотеки» настройки так, что он может найти библиотека.
, когда я не сделать это и просто сделать билд я вижу ПРЕДУПРЕЖДЕНИЕ LNK4221: нет общественности символы найдены, член архива будет недоступен. за которым следует тонна предупреждений LNK4006 для всех файлов obj в этой библиотеке. ключи? У статического файла библиотеки, который я добавляю, есть тонна файлов obj в нем, и поскольку я предполагаю, что не использую или не ссылаюсь на все те, что содержатся в моем коде, я думаю, возможно, было бы нормально игнорировать эти предупреждения ... и, следовательно, не уверен, как избавиться от этих предупреждений, поскольку мне нравится сохранять очень чистую сборку. – user295030
VC++ включает в себя менеджер библиотеки командной строки, который называется lib.exe. Это можно использовать для combine both object files and library files into a single library.
Возможно, это не относится к вашему делу, но в некоторых случаях оно объединяет стороннюю библиотеку и распространяет ее как библиотеку, а не окончательное приложение (или, в случае многих лицензий с открытым исходным кодом, источник), может противоречить условиям лицензии для этой библиотеки. Поэтому примените некоторую осторожность в таких случаях.
где вы запускаете эту команду? Командная строка vs2008? и каков будет путь? где фактический проект? – user295030
@ user295030 - yes, lib.exe будет запущен из командной строки. Путь команды зависит от того, где вы установили Visual Studio - проще всего запустить «Командная строка Visual Studio», чтобы настроить вашу среду. –
, и это лучше, чем использование acutal .lib, который я вкладываю в зависимость от своей библиотеки? – user295030