Я компилирую собственный проект. И остановленный этой ошибкой:
ССЫЛКА || фатальная ошибка LNK1181: не может открыть входной файл 'obj\win\release\src\lua\bindings.o' |
Компиляция использующего Кода:: Блоки с VS 2005/2008 компилятор под win7. Существует также партия другого пустые каталоги, где *.o файлы отсутствуют.
Что они делают?
Файл, заканчивающийся на .o, является объектным файлом . Компилятор создает объектный файл для каждого исходного файла перед их объединением в окончательный исполняемый файл.
Объектный файл .o (также .obj на Windows) содержит скомпилированный объектный код (т.е. машинный код, созданный вашим компилятором C или C++), а также имена функций и других объектов, содержащихся в файле. Объектные файлы обрабатываются компоновщиком для получения конечного исполняемого файла. Если в процессе сборки эти файлы не были созданы, вероятно, что-то не так с вашими makefile/project файлами.
Ink-Jet прав. Точнее, .o (.obj) -- или объектный файл - это единый исходный файл, скомпилированный в машинный код (Я не уверен, является ли "машинный код" таким же или похожим на исполняемый машинный код). В конечном счете, это промежуточное звено между исполняемой программой и простым текстовым исходным файлом.
Линкер использует o-файлы для сборки исполняемого файла.
Википедия может иметь более подробную информацию. Я не уверен, сколько информации вам нужно или нужно.
Вы получили несколько ответов, и большинство из них правильные, но упустите то, что (я думаю), вероятно, является здесь главным.
Я предполагаю, что у вас есть make-файл, который вы пытаетесь использовать для создания исполняемого файла. Если вы не знакомы с ними, в make-файлах перечислены зависимости между файлами. Для действительно простого случая это может быть что-то вроде:
myprogram.exe: myprogram.o
$(CC) -o myprogram.exe myprogram.o
myprogram.o: myprogram.cpp
$(CC) -c myprogram.cpp
Первая строка говорит, что myprogram.exe
зависит от myprogram.o
. Во второй строке рассказывается, как создать myprogram.exe
из myprogram.o
. Третья и четвертая строки говорят, что myprogram.o
зависит от myprogram.cpp
и от того, как создать myprogram.o
из myprogram.cpp` соответственно.
Я предполагаю, что в вашем случае у вас есть make-файл, подобный приведенному выше, который был создан для gcc. Проблема, с которой вы столкнулись, заключается в том, что вы используете его с MS VC вместо gcc. Как это часто бывает, MS VC использует расширение «.obj» для своих объектных файлов вместо «.o».
Это означает, что когда make (или ее эквивалент, встроенный в IDE в вашем случае) пытается собрать программу, она просматривает эти строки, пытаясь выяснить, как собрать myprogram.exe
. Для этого он видит, что ему нужно построить myprogram.o
, поэтому он ищет правило, которое сообщает ему, как построить myprogram.o
. Это говорит о том, что он должен скомпилировать файл .cpp, поэтому он это делает.
Затем все ломается - компилятор VC ++ создает myprogram.obj
вместо myprogram.o
как объектный файл, поэтому, когда он пытается перейти к следующему шагу для создания myprogram.exe
из myprogram.o
, он обнаруживает, что его попытка создать myprogram.o
просто не удалось. Он выполнил то, о чем говорилось в правиле, но не произвел myprogram.o
, как было обещано. Он не знает, что делать, поэтому закрывается и выдает сообщение об ошибке.
Решение этой конкретной проблемы, вероятно, довольно просто: отредактируйте файл make так, чтобы все объектные файлы имели расширение .obj
вместо .o
]. Есть место для многих вопросов, все ли это исправит - это может быть все, что вам нужно, или это может просто привести к другим (возможно, более сложным) проблемам.