Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Проблемы при компиляции (путь к линкеру)


Автор: DrGrey 16.10.2006, 11:39
Здравствуйте, уважаемые Кодеры.
У меня следующая проблема:
Я переустановил систему (Microsoft Windows XP/2002 Professional 5.01.2600 (Service Pack 2)) и поставил Microsoft Visual C++ 6.0 Enterprise Edition (я им почти не пользовался раньше т.к. работал в Borland C++ V5.02). При компиляции любого проекта выдает следующее:

Код

Linking...
LINK : fatal error LNK1104: cannot open file "C:\Program.obj"
Error executing link.exe.

WinProg.exe - 1 error(s), 0 warning(s)


Поставил Microsoft Visual Studio .NET 2003 – то же самое. И ведь знаю что проблема в указании пути к линкеру, а сделать ничего не могу. Я перепробовал все: менял пути, ставил в другую директорию, удалял пробелы из пути, задавал пути в стиле ДОС, снимал с папок атрибут только для чтения, все напрасно. Может быть я не так или не там указываю пути?
Буду очень признателен за любой совет.

Автор: Sartorius 16.10.2006, 11:51
 Объектник на самом деле существует в этой папке?

Автор: DrGrey 16.10.2006, 15:06
Нет! Скорее всго имеется в виду что-то в  "Program Files".

Автор: Любитель 19.10.2006, 15:43
А в какой папке создавался проект?

Автор: Rickert 20.10.2006, 01:23
Цитата(DrGrey @  16.10.2006,  15:06 Найти цитируемый пост)
Нет! Скорее всго имеется в виду что-то в  "Program Files". 

Что где имеется ввиду?
В какой папке создал проект. У тебя видимо опции криво проставлены, менял чего?

Автор: DrGrey 20.10.2006, 20:50
Сначала проект создавался в папке:
C:\Program Files\Microsoft Visual Studio\MyProjects\WinProg;
А потом я скопировал его в корень, без пробелов:
C:\WinProg;

Опции не менял ни в одном пакете, но скорее всего это они. Подскажите, пожалуйста, по подробнее, как и где, правильно, прописать путь к линкеру в Microsoft Visual C++ 6.0 Enterprise Edition или Microsoft Visual Studio .NET 2003.


P.S. Не компилится даже элементарный "Hello, World!"!!! smile 

Автор: Rickert 21.10.2006, 04:00
DrGrey, не парься, а просто заведи папку, где будешь вести проекты свои и пресоздай в ней проект, исходники перекинь и переподключи. 

Автор: DrGrey 21.10.2006, 21:33
Уважаемый, Rickert, я бы с удовольствием, но ведь эффект тот же – то есть:
LINK : fatal error LNK1104: cannot open file "C:\Program.obj"

Какой бы проект ни компилил! В кокой бы папке ни компилил и каким бы пакетом…

Help me, please!!! smile  smile  smile 


Автор: Dreamer_0x01 23.10.2006, 00:57
Так, а в переменных окружения TEMP и TMP случаем нет русскоязычных букв?
(Свойства системы-дополнительно-переменные среды).

Автор: Rickert 23.10.2006, 03:29
DrGrey, твой компилятор ищет промежуточный файл компиляции не в папке с проектом, а на диске C:\, непосредственно в его корне. Допустим ты создал проект в папке "C:\My Coding\Programms\1". Загляни в туда и ищи там папку "Debug"(если компилишь в дебуге, если в релизе, то соответственно "Release") и смотри: есть ли там файлы *.obj. Если они там, то идём в "Project -> <название проекта> Properties" в главном меню. Там: в General смотрим опцию "Intermediate Directory" - должна быть "Debug", если ты в режиме дебага, и "Release", если ты в режиме релиза; затем там же в опциях ищи "C++\Output Files" свойство "Object file name" - должно быть "$(IntDir)/". Пока проверь это.

Автор: DrGrey 25.10.2006, 16:29
Приветствую!
Простите, что долго не выходил на связь.
Итак, по порядку.
Уважаемый, Dreamer_0x01, я пришел к выводу, что Вы близки к истине и причина проблемы связана с переменными окружения, но не с кириллицей (ниже скажу почему).

Если Вы имели ввиду переменные среды пользователя, то тут ситуация такая:
TEMP=%USERPROFILE%\Local Settings\Temp
TMP=%USERPROFILE%\Local Settings\Temp

Если системные переменные, то:
TEMP=%SystemRoot%\TEMP
TMP=%SystemRoot%\TEMP

Продолжение ниже…


Уважаемый, Rickert, меня не покидает мысль о том что и Ваша версия имеет все шансы стать Джек-потом, но пока в указанных Вами местах проблем не обнаружено (все выглядит так как Вы сказали). Надеюсь, на дальнейшую поддержку и буду признателен за любой совет.


Теперь о главном (о моих новых догадках и проблемах).

Немного истории…
У меня стоял Borland C++ v5.02, потом я поставил Microsoft Visual C++ 6.0 Enterprise Edition (не удаляя, работающий до сих пор, Borland) и Visual не заработал. Затем, ничего не удаляя, я поставил Microsoft Visual Studio .NET 2003 в отдельный каталог (C:\MVSNET23\) в корне диска С:, но и он не пашет.

Догадки…

Среди переменных среды пользователя я нашел также такие:
Include= C:\MVSNET23\SDK\v1.1\include\;C:\Program Files\Microsoft Visual Studio\VC98\atl\include;C:\Program Files\Microsoft Visual Studio\VC98\mfc\include;C:\Program Files\Microsoft Visual Studio\VC98\include
lib= C:\MVSNET23\SDK\v1.1\Lib\;C:\Program Files\Microsoft Visual Studio\VC98\mfc\lib;C:\Program Files\Microsoft Visual Studio\VC98\lib
MSDevDir= C:\Program Files\Microsoft Visual Studio\Common\MSDev98
Path= C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\VC98\bin;C:\Program Files\Borland\BC5\BIN;

А среди системных такие:
INCLUDE= C:\MVSNET23\SDK\v1.1\include\
LIB= C:\MVSNET23\SDK\v1.1\Lib\
VS71COMNTOOLS= C:\MVSNET23\Common7\Tools\

При этом файл AUTOEXEC.BAT содержит следующее:
@echo off
set path=%path%;C:\Program Files\BORLAND\BC5\BIN;C:\Program Files\BORLAND\BC5\LIB;C:\Tasm
set include=C:\Program Files\BORLAND\BC5\INCLUDE
set lib=C:\Program Files\BORLAND\BC5\LIB
set link=C:\Program Files\BORLAND\BC5\BIN

Вопрос – не в этой ли путанице проблема?

Подскажите, пожалуйста, где можно почитать о переменных окружения (у меня с этим очень слабенькоsmile smile )?

Проблема…
Теперь я не могу найти как удалить Microsoft Visual C++ 6.0 да и Visual Studio .NET 2003 тоже! Я просто болел недавно smile )


P.S. Помогите, кто чем может!!! smile  smile  smile 

Автор: Dreamer_0x01 25.10.2006, 17:57
Попробуйте переменные окружения TEMP и TMP выставить четко в виде какого-то пути (например TMP=c:\TEMP\TMP).
Потому что %USERPROFILE% в этих переменных даст вам что-то вида "C:\Document And Settings\Вася Пупкин".

Автор: DrGrey 25.10.2006, 22:34
Я забыл сказать, что указанные выше значения видны в окне изменения значений (появляющемся при двойном щелчке на переменной), а в окне просмотра указано следующее:

Переменные среды пользователя:
TEMP=C:\Documents and Settings\Main\Local Settings\Temp
TMP=C:\Documents and Settings\Main\Local Settings\Temp

Системные переменные:
TEMP=C:\WINDOWS\Temp
TMP=C:\WINDOWS\Temp

На всякий случай сменил – по нулям!

P.S. Да, забыл сказать, при компиляции (но не билде) Visual C++ 6.0 начал выдавать следующее:
Код

c:\tp\t\t.cpp(4) : fatal error C1083: Cannot open precompiled header file: 'Debug/t.pch': No such file or directory
Error executing cl.exe.


А при билде снова:
Код

LINK : fatal error LNK1104: cannot open file "C:\Program.obj"
Error executing link.exe.

Автор: Dreamer_0x01 27.10.2006, 07:44
Так, насчет файла pch.
Попробуй:
1. удалить его. Не бойся, он создастся снова.
2. В свой код первой строкой добавить запись вида #unclude "stdafx.h". Если она там есть, то наоборот, скомпилировать без нее.
3. в настройках компиляции попробовать убрать что-то вида "создавать файл препроцессора pch", дословно не помню, как там называется, так как сижу за чужим компом и студии тут нету, но что-то подобное там есть.

И вопрос еще - так происходит при компиляции абсолютно любого проекта? Иными словами, проверку надо начинать с абсолютно голого проекта, состоящего из минимума файлов и только функции main().

И вопрос еще - если не пытаться строить проект сразу в одно действие, а компилировать каждый файл отдельно, он компилируется, или тоже чего-то не находит?

Автор: doomik 27.10.2006, 08:21
Цитата

c:\tp\t\t.cpp(4) : fatal error C1083: Cannot open precompiled header file: 'Debug/t.pch': No such file or directory
Error executing cl.exe


Помну такую ошибку, у меня она тоже была, в опциях надо отключить "Using precompiled headers" кажется так называется, к сожелению у меня Microsoft Visual C++ не уcтановлен точно сказать не могу.

Tools --> Options --> [не помну] --> Будет можна выбрать из списка, выбираеш C\C++ --> И ставиш галку на "Not using precompiled headers" 
Примерно так, но это из моей памяти  smile 

Автор: DrGrey 12.11.2006, 00:31
Нашел!!! smile  smile  smile 
Проблема была в AUTOEXEC.BAT! Оказывается (как сказал мой знакомый кодер профессионал, после 2-х часов проведенных за поиском этой проблемы) Борланд любит придумывать не придуманное и изобретать велосипед.

Привожу пример AUTOEXEC.BAT до:
@echo off
set path=%path%;C:\Program Files\BORLAND\BC5\BIN;C:\Program Files\BORLAND\BC5\LIB;C:\Tasm
set include=C:\Program Files\BORLAND\BC5\INCLUDE
set lib=C:\Program Files\BORLAND\BC5\LIB
set link=C:\Program Files\BORLAND\BC5\BIN

и после:
@echo off
rem set path=%path%;C:\Program Files\BORLAND\BC5\BIN;C:\Program Files\BORLAND\BC5\LIB;C:\Tasm
rem set include=C:\Program Files\BORLAND\BC5\INCLUDE
rem set lib=C:\Program Files\BORLAND\BC5\LIB
rem set link=C:\Program Files\BORLAND\BC5\BIN


Еще раз прошу прощения за глупые вопросы и всех искренне благодарю за помошь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)