Объедините несколько проектов VS2010 в один файл .lib - PullRequest
2 голосов
/ 26 июля 2011

Я хочу объединить несколько C-проектов Win32 в один .lib-файл.

ОС: Windows XP Sp3 IDE / Comipler: Visual Studio 2010

Теперь у меня есть один родительский проекткоторый ссылается на все другие проекты.Но все функции и глобальные объекты из указанных проектов не включены или не являются общедоступными, поэтому при использовании библиотеки я получаю «неразрешенную внешнюю» ошибку.Функции в родительском проекте работают правильно.

Что я могу сделать?


Есть несколько вариантов ссылок на проекты, но ни один из них, похоже, не решил мою проблему


Даже параметр / INCLUDE в link.exe ни на что не влияет ...

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Наконец я сделал это, определив команду lib как событие make (событие после сборки). lib /out:out.lib in1.lib lin2.lib ...

Это плохо переносимый, но соответствует моим требованиям Спасибо @ Стэн

0 голосов
/ 26 июля 2011

Ссылка одного проекта на другой просто вынуждает один проект быть зависимым от другого, он явно не связывает вывод одного с другим.

Вы должны настроить зависимости проекта так, чтобы библиотеки сначала компилировались, затем вы должны явно добавить выходные данные этих проектов (статическую библиотеку или библиотеку экспорта, если они являются проектами DLL) в список компоновщика «Дополнительные библиотеки» .

Вы можете, как вы предлагаете, объединить несколько библиотек в одну, используя Microsoft Library Manager , но это само по себе не является решением вашей проблемы; вам все равно нужно будет явно связать библиотеку, как указано выше, чтобы создать исполняемый файл - будет только один из них вместо нескольких - я действительно не могу видеть, что есть много смысла в этом, если только функциональность не тесно связана, и если это так почему они не один проект в первую очередь?

Если вы используете инструменты командной строки, то опция компоновщика / INCLUDE не поможет, что просто заставляет ссылаться на объектный код, на который нет ссылки, в противном случае.

...