Dlaczego podczas kompilowania projektu C ++ w programie Visual Studio występuje błąd krytyczny „LNK1104: nie można otworzyć pliku„ C: \ Program.obj ”?

117

Stworzyłem nowy projekt C ++ w Visual Studio 2008. Żaden kod nie został jeszcze napisany; Zmieniono tylko ustawienia projektu.

Kiedy kompiluję projekt, otrzymuję następujący błąd krytyczny:

błąd krytyczny LNK1104: nie można otworzyć pliku „C: \ Program.obj”

Josh Sklare
źródło

Odpowiedzi:

153

Ten konkretny problem jest spowodowany określeniem zależności od pliku lib, który zawiera spacje w ścieżce. Ścieżka musi być ujęta w cudzysłów, aby projekt został poprawnie skompilowany.

Na karcie Właściwości konfiguracji -> Konsolidator -> Dane wejściowe właściwości projektu znajduje się właściwość Dodatkowe zależności . Ten problem został rozwiązany przez zmianę tej właściwości z:

C: \ Program Files \ sofware sdk \ lib \ library.lib

Do:

„C: \ Program Files \ sofware sdk \ lib \ library.lib”

Gdzie dodałem cytaty.

Josh Sklare
źródło
17
Boże, właśnie zawiesiłeś dwudniową pogoń za owadami do 30 sekund :)
jb.
10
Miałem ten sam problem. Jeśli Twój linker jest poprawny, ale katalog lib jest ustawiony nieprawidłowo, może wystąpić ten sam błąd. Spróbuj zajrzeć do Właściwości konfiguracyjne -> Katalogi VC ++ -> Katalogi biblioteki, aby sprawdzić, czy poprawnie ustawiłeś bibliotekę. Czasami folder lib składa się z folderu x86 i x64. Musisz ustawić go na jeden z nich (w zależności od kompilatora) zamiast folderu zawierającego oba.
M4st3rM1nd
1
Nie zapomnij wstawić średnika po "C:\Program Files\sofware sdk\lib\library.lib". Brak znaku ;spowoduje również niepoprawną kompilację projektu.
roscioli
1
Miałem ten problem podczas próby zbudowania OpenCV przy użyciu Visual Studio 2005 (na Windows 8.1) ... i rozwiązałem go. Wspaniały!
AlainD
1
Spróbowałem i nie zadziałało. "Qt5Xmld.lib"; "Qt5XmlPatternsd.lib"; "Qt5Cored.lib";% (AdditionalDependencies) -Co powinienem zmienić?
STF
65

Może się to zdarzyć, jeśli plik również nadal działa.

: -1: błąd: LNK1104: nie można otworzyć pliku „debug \ ****. Exe”

kolęda
źródło
4
to też był mój problem!
Kamran Bigdely
1
Mam to spowodowane tym, że MS Security Essentials blokuje plik.
Synetech
tak, zamknąłem poprzednie okno konsoli i nagle można było odczytać bibliotekę.
Kari
15

Problem zniknął po zamknięciu i ponownym otwarciu programu Visual Studio. Nie wiem, dlaczego wystąpił problem, ale może warto spróbować.

To było w VS 2013 Ultimate, Windows 8.1.

Daniel Neel
źródło
4
ah, Microsoft ... Nasza pierwsza próba powinna zawsze być zamknięta i ponownie otwarta (lub wyłączyć i włączyć) - kilka tajemniczych błędów znika, kiedy to zrobimy ...
Leonardo Alves Machado
1
Czuję się tak wstyd, że to rozwiązanie może rozwiązać mój problem. Teraz nie mogę już wychodzić na zewnątrz, aby spotkać się z przyjaciółmi i rodziną.
javaLover
2
Miałeś ten sam problem co Carol.
amod
10

Sprawdź także, czy nie masz włączonej tej opcji: Właściwości konfiguracji -> C / C ++ -> Preprocessor -> Preprocess to a File .

Assaf Levy
źródło
W moim przypadku to też był problem, ale co powinienem zrobić, jeśli chcę włączyć tę flagę (aby wyświetlić wstępnie posiadany plik)?
Guy Avraham
2
Masz kilka obejść tutaj: Jak wyprowadzić wstępnie przetworzony kod ORAZ skompilować go (Visual Studio) i tutaj: Kompilowanie projektu (VS 2008) z argumentem / p (preprocesowanie do pliku) nie jest kompilowane . Zasadniczo jest to opcja kompilatora, więc będzie działać albo, ale nie oba.
Assaf Levy
4

Miałem ten sam problem. Spowodowany był przez „,” w nazwie folderu dodatkowej ścieżki do biblioteki. Rozwiązany przez zmianę dodatkowej ścieżki do biblioteki.

harsini
źródło
4

Moim problemem było brakujące .librozszerzenie, właśnie łączyłem się z nim mylibi VS zdecydował się poszukać mylib.obj.

Patrizio Bertoni
źródło
3

W moim przypadku była to kwestia źle skierowanego odniesienia. Projekt odwoływał się do danych wyjściowych innego projektu, ale ten drugi nie wyświetlał pliku, którego szukał pierwszy.

Newtopian
źródło
3

Rozwiązanie 1 (w moim przypadku): uruchom ponownie proces Eksploratora Windows (tak, menedżer plików systemu Windows).

Rozwiązanie 2:

  1. Zamknij program Visual Studio. Wylogowanie z systemu Windows
  2. Zaloguj się, ponownie otwórz program Visual Studio
  3. Buduj jak zwykle. Teraz tworzy problematyczny plik i może uzyskać do niego dostęp.

Przypuszczam, że czasami system plików lub ktokolwiek go kontroluje, gubi się ze swoimi uprawnieniami. Przed ponownym uruchomieniem sesji systemu Windows próbowałem zabić msbuild32.exeprocesy zombie , zrestartować Visual Studio, sprawdzić, czy żaden z nich nie pokazuje nawet pliku powodującego problem. Brak problemów z konfiguracją kompilacji. To się zdarza od czasu do czasu. Niektóre wewnętrzne rzeczy w systemie Windows nie naprawiają się, wymagają ponownego uruchomienia.

Lissandro
źródło
Miałem ten problem z VS2019 ... to naprawiło ... niesamowite, że błędy się utrzymują. thx
JHBonarius
2

Miałem ten sam błąd, tylko z pakietem Nuget, który zainstalowałem (taki, który nie jest tylko nagłówkiem), a następnie próbowałem odinstalować.
To, co było dla mnie nie tak, to fakt, że nadal dołączałem nagłówek pakietu, który właśnie odinstalowałem, w jednym z moich plików .cpp (całkiem głupie, tak).
Usunąłem nawet link do dodatkowych katalogów biblioteki Project -> Properties -> Linker -> General, ale oczywiście bezskutecznie, ponieważ wciąż próbowałem odwołać się do nieistniejącego nagłówka.

Zdecydowanie mylący komunikat o błędzie w tym przypadku, ponieważ nazwa nagłówka była, <boost/filesystem.hpp>ale błąd dał mi "cannot open file 'llibboost_filesystem-vc140-mt-gd-1_59.lib'"i żadnych numerów linii ani nic.

Matthias
źródło
2

Miałem ten sam problem, ale rozwiązania dla mojego przypadku nie ma w odpowiedziach. Mój program antywirusowy (AVG) określił plik MyProg.exejako wirusa i umieścił go w „magazynie wirusów”. Musisz sprawdzić ten magazyn i jeśli plik tam jest - po prostu go przywróć. Pomogło mi.

Nazarii Plebanskii
źródło
1

W przypadku projektu zespołu (ProjectName -> Build Dependencies -> Build Customizations -> masm (wybrane)), ustawienie Generate Preprocessed Source Listing na True spowodowało również problem, wyczyszczenie ustawienia naprawiło go. VS2013 tutaj.

MadeOfAir
źródło
1

Napotykam ten sam problem z linkerem narzekającym na brak głównego pliku wykonywalnego. Stało się to podczas przenoszenia naszego rozwiązania do nowego programu Visual Studio 2013 . Rozwiązanie to zróżnicowana mieszanka zarządzanych i niezarządzanych projektów / kodu. Problem (i rozwiązanie) zakończył się brakiem pliku app.config w folderze rozwiązania. Zajęło mi to dzień, aby to rozgryźć :( ponieważ dziennik wyjściowy nie był zbyt pomocny.

Nicko Po
źródło
0

Odpowiadam, ponieważ nie widzę tego konkretnego rozwiązania na liście nikogo innego.

Najwyraźniej mój program antywirusowy (Ad-Aware) oznaczał bibliotekę DLL, od której zależy jeden z moich projektów, i usuwał ją. Nawet po wykluczeniu katalogu, w którym znajduje się biblioteka DLL, to samo zachowanie trwało do momentu ponownego uruchomienia komputera.

łatwiejszy
źródło
0

W moim przypadku zastąpiłem pliki bibliotek matematycznych z poprzedniego kursu Game Engine Graphics na GLM. Problem polegał na tym, że nie dodałem ich do projektu w programie Visual Studio Solution Explorer (mimo że znajdowały się w repozytorium projektu).

Artorias2718
źródło
0

Miałem ten problem w połączeniu z błędem LNK2038, śledziłem ten post aby posegregować biblioteki DLL RELEASE i DEBUG. W trakcie tego procesu wyczyściłem cały folder, w którym znajdowały się te zależności.

Na szczęście miałem kopię zapasową wszystkich tych plików i otrzymałem plik, dla którego ten błąd był wrzucany z powrotem do folderu DEBUG, aby rozwiązać problem. Kod błędu był w jakiś sposób mylący, ponieważ musiałem spędzić dużo czasu, aby ponownie dojść do tej wskazówki z jednej z odpowiedzi z tego postu.

Mam nadzieję, że ta odpowiedź pomoże komuś w potrzebie.

N00b Pr0grammer
źródło
0

Rozwiązałem go przez dodanie o istniejący projekt do mojego rozwiązania , które zapomniał dodać w po raz pierwszy.

Markus Weber
źródło
0

Miałem ten sam błąd:

fatal error LNK1104: cannot open file 'GTest.lib;'

Było to spowodowane ;końcem. Jeśli masz wiele bibliotek, należy je oddzielić pustą spacją (spacją), bez przecinków ani średników!

Więc nie używaj ;ani niczego innego, wymieniając biblioteki wProject properties >> Configuration Properties >> Linker >> Input

zar
źródło
0

Wypróbowałem powyższe rozwiązanie, ale nie zadziałało. Więc zmieniam nazwę exe i odbudowuję rozwiązanie. Mi to pasuje.

user3500315
źródło
0

Miałem dokładnie ten błąd podczas tworzenia biblioteki DLL VC ++ w programie Visual Studio 2019:

LNK1104: nie można otworzyć pliku „C: \ Program.obj”

Okazało się, że w obszarze Właściwości projektu> Konsolidator> Dane wejściowe> Plik definicji modułu określiłem plik def, który miał niedopasowany podwójny cudzysłów na końcu nazwy pliku. Usunięcie niedopasowanego podwójnego cudzysłowu rozwiązało problem.

MikeOnline
źródło
0

Zabity msbuild32.exei zbudowany ponownie. U mnie to zadziałało.

Imad
źródło
-1

Ten sam problem napotkałem w „Visual Studio 2013”.

LNK1104: cannot open file 'debug\****.exe

Problem rozwiązał się po zamknięciu i ponownym uruchomieniu programu Visual Studio.

user3860869
źródło
-3

Miałem ten sam problem, właśnie skopiowałem kod do nowego projektu i rozpocząłem kompilację. Zaczął się pojawiać inny błąd. błąd C4996: „fopen”: ta funkcja lub zmienna może być niebezpieczna. Zamiast tego rozważ użycie fopen_s

Aby ponownie rozwiązać ten problem, dodałem moją jedyną właściwość w projekcie projektu, jak poniżej. Projekt -> Właściwości -> Właściwość konfiguracji -> c / c ++. W tej kategorii znajduje się nazwa pola Definicje preprocesora Dodałem _CRT_SECURE_NO_WARNINGS to, aby rozwiązać problem Mam nadzieję, że pomoże ...

Dziękuję Ci

Sunil
źródło
Ta odpowiedź nie ma związku z oryginalnym postem.
zar
Nie wspominając o wyłączeniu funkcji bezpieczeństwa nie jest dobrym pomysłem
Matti Virkkunen