Каковы отношения .lib и .obj друг к другу и моему проекту на c ++? - PullRequest
6 голосов
/ 23 января 2010

Как файлы .lib и .obj связаны друг с другом? Какова их цель? Является ли .lib просто набором файлов .obj? Если так, то .obj хранится внутри .lib, что делает ненужным .obj?

Ответы [ 3 ]

11 голосов
/ 23 января 2010

Как правило, файлы .obj относятся к объектным файлам . Это исходный файл в скомпилированном виде. Например, main.cpp и foo.cpp будут производить main.obj и foo.obj.

В этом случае компоновщикам нужно связать их вместе, чтобы main.obj мог обращаться к функциям, определенным в foo.obj и наоборот. Компоновщик выведет ваш двоичный файл, который является .lib (или .a, или .exe, или .dll``, и т. Д.).

Таким образом, в широком смысле да, двоичный вывод (.lib в вашем случае) представляет собой набор связанных .obj файлов. Когда вы закончите компиляцию и захотите использовать библиотеку, вам понадобятся только другие программы для связи с .lib. .obj - это то, что считается промежуточным файлом и не требуется после завершения связывания.

2 голосов
/ 23 января 2010

Это зависит. Если файл .lib является статической библиотекой, то это более или менее просто набор файлов .obj. Если вы создаете или используете DLL, тогда файл .lib - это просто библиотека импорта, в которой содержится информация о том, какие символы доступны в соответствующей DLL.

1 голос
/ 23 января 2010

Да, файл .lib - это просто набор файлов .obj. С содержимым файлов .obj ничего не было сделано, лучшая аналогия - архив .zip. Да, вы можете удалить файлы .obj после создания .lib, поскольку .lib содержит дословную копию файлов .obj.

Помните, что если вы используете .lib для распространения вашего продукта, вам, как правило, придется создать 4 из них. Отладка против сборки выпуска и два варианта CRT (/ MT против /MD).

...