Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > LNK1104


Автор: Dimkostav 20.1.2009, 10:07
Здравствуйте. Помогите пожалуйста разобраться, ибо я новичок в этом не лёгком деле. 

Проблемма вот в чём:
Пишу клиентское приложение для PostgreSQL, для этого использую библиотеку wxWidgets. После того, как DialogBlocks сгенерировал код для форм добавляю файлы с расширениями cpp, h, rc в пустой проект (MS Visual Studio 6.0). Прописал необходимые пути для файлов wxWidgets, подключил необходимые библиотеки. После компиляции (Release) выдаёт следующее:

LINK: fatal error LNK1104: cannot open file "Release/test.exe"
Error executing link.exe

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

Автор: Lazin 20.1.2009, 10:19
ты пробовал включить и выключить?

Автор: Rickert 20.1.2009, 10:21
Dimkostav, посмотри, в папке проекта, подпапке Release, есть файл "test.exe", после компиляции?

Автор: Lazin 20.1.2009, 10:21
Цитата(MSDN)

Error Message 
cannot open file 'filename'


The tool could not open the given file.

To fix by checking the following possible causes:

Not enough disk space.

File does not exist.

When specifying libraries in a project's property pages dialog box, library names should be separated by spaces (and not commas).

Incorrect filename or path.

Invalid drive specification.

Insufficient file permissions.

Path for filename expands to more than 260 characters.

If the given file is named LNKn, which is a filename generated by the linker for a temporary file, the directory specified in the TMP environment variable may not exist, or more than one directory is specified for the TMP environment variable. (Only one directory path should be specified for the TMP environment variable.)

If the error message occurs for a library name, and you recently ported the .mak file from a previous Microsoft Visual C++ development system, the library may no longer be valid. Ensure that the library still exists in this circumstance.

Another program may have the file open and the linker cannot write to it.

Incorrect LIB environment variable. For information on how to update the LIB environment variable, see VC++ Directories, Projects and Solutions, Options Dialog Box . Make sure any directories with libraries you need are listed here. 

The linker uses temporary files in several cases. Even if you have sufficient disk space, a very large link can deplete or fragment the address space.

To fix by using the following possible solutions

Use /OPT (Optimizations); doing transitive comdat elimination reads all the object files multiple times.

Upgrade to Windows XP.



Автор: Dimkostav 20.1.2009, 10:30
Цитата(Rickert @ 20.1.2009,  10:21)
Dimkostav, посмотри, в папке проекта, подпапке Release, есть файл "test.exe", после компиляции?

да, в папке Release файл "test.exe" есть. От туда тоже не запускается. И удалить "test.exe" не получется. Пишет ошибку.

Автор: Rickert 20.1.2009, 10:38
Так с ходу и не скажешь. Перезагрузи машину чтоли  smile 

Автор: Dimkostav 20.1.2009, 11:43
Цитата(Rickert @ 20.1.2009,  10:38)
Так с ходу и не скажешь. Перезагрузи машину чтоли  smile

Не, это не помогает

Автор: xvr 20.1.2009, 11:51
Цитата(Dimkostav @ 20.1.2009,  10:30)
Цитата(Rickert @ 20.1.2009,  10:21)
Dimkostav, посмотри, в папке проекта, подпапке Release, есть файл "test.exe", после компиляции?

да, в папке Release файл "test.exe" есть. От туда тоже не запускается. И удалить "test.exe" не получется. Пишет ошибку.

Перезагрузи машину, затем удали test.exe. Если не получается - запусти проверку диска, похоже твой test.exe 'немного' битый  smile 

Автор: jonie 20.1.2009, 18:13
как вариант может быть он немного действительно занят (например антивирусом или вообще запущенный). есть тулза unlocker покажет лоченые хендлы...

Автор: Dimkostav 20.1.2009, 18:43
Всем большое спасибо! Буду пробывать.

Автор: Dimkostav 21.1.2009, 10:34
Не, не катит. Всё то же самое выдаёт... smile 
Пробывал и антивир отключать, и удалял экзешник после перезагрузки и всё то же...
После запуска экзешника появляется одноимённый процесс, поэтому потом не получается удалить. 

Автор: Lazin 21.1.2009, 11:06
после запуска экзешников, иногда запускаются одноименные процессы, так-уж заведено, что-бы что-то делать с экзэшниом, нужно завершить одноименный процесс smile 

Автор: Dimkostav 21.1.2009, 11:18
Цитата(Lazin @ 21.1.2009,  11:06)
после запуска экзешников, иногда запускаются одноименные процессы, так-уж заведено, что-бы что-то делать с экзэшниом, нужно завершить одноименный процесс smile

Всё это ясно. Как сделать, что бы помимо процесса ещё и прогрмма запускалась?

Автор: xvr 21.1.2009, 12:16
Цитата(Dimkostav @ 21.1.2009,  11:18)
Цитата(Lazin @ 21.1.2009,  11:06)
после запуска экзешников, иногда запускаются одноименные процессы, так-уж заведено, что-бы что-то делать с экзэшниом, нужно завершить одноименный процесс smile

Всё это ясно. Как сделать, что бы помимо процесса ещё и прогрмма запускалась?

Я открою тебе великую тайну - этот процесс и есть твоя программа  smile 
А еще я хочу донести до тебя откровение свыше - есть такая ВЕЩЬ, называется дебагер, с его помощью можно творить чудеса, например узнать, почему твой процесс так и не превратился в 'программу' (я так понимаю не появился GUI ?)  smile 

Автор: Rickert 21.1.2009, 12:18
xvr, у него эта бага в релиз версии.

Автор: Dimkostav 21.1.2009, 12:23
Цитата(xvr @ 21.1.2009,  12:16)
Цитата(Dimkostav @ 21.1.2009,  11:18)
Цитата(Lazin @ 21.1.2009,  11:06)
после запуска экзешников, иногда запускаются одноименные процессы, так-уж заведено, что-бы что-то делать с экзэшниом, нужно завершить одноименный процесс smile

Всё это ясно. Как сделать, что бы помимо процесса ещё и прогрмма запускалась?

Я открою тебе великую тайну - этот процесс и есть твоя программа  smile 
А еще я хочу донести до тебя откровение свыше - есть такая ВЕЩЬ, называется дебагер, с его помощью можно творить чудеса, например узнать, почему твой процесс так и не превратился в 'программу' (я так понимаю не появился GUI ?)  smile

да, GUI не появился, именно так... А процесс висит... Как тут может помочь дебаггер?

Автор: Lazin 21.1.2009, 12:24
Цитата(Rickert @  21.1.2009,  12:18 Найти цитируемый пост)
xvr, у него эта бага в релиз версии

нигде не написано, что оно в дебаг версии работало

Добавлено через 49 секунд
Цитата(Dimkostav @  21.1.2009,  12:23 Найти цитируемый пост)
да, GUI не появился, именно так... А процесс висит... Как тут может помочь дебаггер?

Debug->Step Into
и вперед

Автор: Dimkostav 21.1.2009, 12:48
Запустил дебаггер. Жму F10 (Step Over). Застревает на строке:

0051C9CF call 00402 B90

Процесс висит.
А дальше-то что?

Автор: xvr 21.1.2009, 13:08
Цитата(Dimkostav @ 21.1.2009,  12:48)
Запустил дебаггер. Жму F11 (Step Into). Застревает на строке:

7C902BB3       repe scas       dword ptr [edi]

А дальше-то что? Step Over? Step Out?

Сначала нужно откомпилить в Debug версии (Build->Set Active Configuration, F7)
Затем запустить (F5). Когда повиснет - прервать (Ctrl-Break, или через меню). Потом смотришь, где оно стоит и почему.

Да, перед тем, как прерывать, нужно убедится, что оно действительно зациклилось - процесс должен есть время CPU. Если у него около 0%, то скорее всего GUI просто не показывается и нужно смотреть исходные тексты инициализации.

Автор: vinter 21.1.2009, 13:14
Цитата(Rickert @  21.1.2009,  13:18 Найти цитируемый пост)
xvr, у него эта бага в релиз версии.

так никто же не мешает сменить цель

Автор: Dimkostav 21.1.2009, 14:10
Цитата(xvr @ 21.1.2009,  13:08)
Цитата(Dimkostav @ 21.1.2009,  12:48)
Запустил дебаггер. Жму F11 (Step Into). Застревает на строке:

7C902BB3       repe scas       dword ptr [edi]

А дальше-то что? Step Over? Step Out?

Сначала нужно откомпилить в Debug версии (Build->Set Active Configuration, F7)
Затем запустить (F5). Когда повиснет - прервать (Ctrl-Break, или через меню). Потом смотришь, где оно стоит и почему.

Да, перед тем, как прерывать, нужно убедится, что оно действительно зациклилось - процесс должен есть время CPU. Если у него около 0%, то скорее всего GUI просто не показывается и нужно смотреть исходные тексты инициализации.

Вот откомпилил в Debug. Появилась ещё проблемма одна:

catalog.obj : error LNK2001: unresolved external symbol "void __cdecl wxOnAssert(char const *,int,char const *,char const *,char const *)" (?wxOnAssert@@YAXPBDH000@Z)

main.obj : error LNK2001: unresolved external symbol "void __cdecl wxOnAssert(char const *,int,char const *,char const *,char const *)" (?wxOnAssert@@YAXPBDH000@Z)

uchetapp.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall wxAppConsole::OnAssert(char const *,int,char const *,char const *)" (?OnAssert@wxAppConsole@@UAEXPBDH00@Z)

uchetapp.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall wxAppConsole::OnAssertFailure(char const *,int,char const *,char const *,char const *)" (?OnAssertFailure@wxAppConsole@@UAEXPBDH000@Z)

Debug/test.exe : fatal error LNK1120: 3 unresolved externals

Error executing link.exe.

test.exe - 5 error(s), 0 warning(s)

Что с этим-то делать? smile 

Автор: SerpentVV 21.1.2009, 14:56
А это похоже на то, что библиотека не подключена или как-то неправильно подключена. 
Или библиотека левая - линкер не находит объектных модулей указанных функций.  

Автор: Dimkostav 21.1.2009, 15:41
Цитата(xvr @ 21.1.2009,  13:08)
Цитата(Dimkostav @ 21.1.2009,  12:48)
Запустил дебаггер. Жму F11 (Step Into). Застревает на строке:

7C902BB3       repe scas       dword ptr [edi]

А дальше-то что? Step Over? Step Out?

Сначала нужно откомпилить в Debug версии (Build->Set Active Configuration, F7)
Затем запустить (F5). Когда повиснет - прервать (Ctrl-Break, или через меню). Потом смотришь, где оно стоит и почему.

Да, перед тем, как прерывать, нужно убедится, что оно действительно зациклилось - процесс должен есть время CPU. Если у него около 0%, то скорее всего GUI просто не показывается и нужно смотреть исходные тексты инициализации.

Ну а может вместо этого аццкого дебагинка и проблемм с билиотеками посмотреть тексты инициализации? Потому что при компиляции в Release загрузка цп на процессе "test.exe" 0%.
Подскажи пожалуйста, куды именно смотреть, что искать? Код-то я не руками пока писал, его DialogBlocks сгенерировал...
Тут конечно есть ещё один warning C4005: 'ID_LISTCTRL1' : macro redefination. При том, что этот ListCtrl должен быть на самой первой форме. Как думаете, из-за него что ли может не появляться весь GUI?

Автор: xvr 21.1.2009, 18:53
Спроси тутhttp://forum.vingrad.ru/forum/c-c++QT-gtk-wxWidgets.html

Автор: Dimkostav 21.1.2009, 19:00
Всем большое спасибо! Многое извлёк из этой проблеммы. Буду разбираться дальше smile 

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