error unresolved external symbol при переносе проекта VC++EE2005 на новый комп

Дмитрий77
Дата: 27.08.2014 23:00:25
Перенес VC++2005 на новый комп.
Все установил, настроил точно так же (хотелось бы думать).
По крайне мере над Tools -> Options ->> Projects And Solutions -> VC++ Project Directories поработал над полным соответствием
Компилирую свой любимый Ptlib->Opal->T38modem, специально следил что все "точно также" на обоих компах
Сразу отмечу, что у меня засунуты в код Win32-API,
dll-ы скомпилировались без проблем, а exe-шник выдал:

1>Linking...
1>   Creating library .\Release/t38modem.lib and object .\Release/t38modem.exp
1>main_process.obj : error LNK2019: unresolved external symbol __imp__FreeSid@4 referenced in function "int __cdecl IsLocalSystem(void)" 

(?IsLocalSystem@@YAHXZ)
1>main_process.obj : error LNK2019: unresolved external symbol __imp__CheckTokenMembership@12 referenced in function "int __cdecl 

IsLocalSystem(void)" (?IsLocalSystem@@YAHXZ)
1>main_process.obj : error LNK2019: unresolved external symbol __imp__AllocateAndInitializeSid@44 referenced in function "int __cdecl 

IsLocalSystem(void)" (?IsLocalSystem@@YAHXZ)
1>sipep.obj : error LNK2001: unresolved external symbol __imp__SHGetFolderPathA@20
1>main_process.obj : error LNK2019: unresolved external symbol __imp__SHGetFolderPathA@20 referenced in function "protected: bool __thiscall 

T38modem::Initialise(void)" (?Initialise@T38modem@@IAE_NXZ)
1>capi_ep.obj : error LNK2001: unresolved external symbol __imp__SHGetFolderPathA@20
1>h323ep.obj : error LNK2001: unresolved external symbol __imp__SHGetFolderPathA@20
1>manager.obj : error LNK2001: unresolved external symbol __imp__SHGetFolderPathA@20
1>.\Release/t38modem.exe : fatal error LNK1120: 4 unresolved externals
1>Build log was saved at "file://c:\t38modem\opal\Release\BuildLog.htm"
1>t38modem - 9 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Т.е. явные намеки на проблемы с API.
Сам проект я при переносе не менял.
Но тем не менее пошел в свойства проекта.
Обнаружил отличия в Linker -> Command Line

На старом компе:
автор
/OUT:".\Release/t38modem.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:".\Release\t38modem.exe.intermediate.manifest"

/PDB:".\Release/t38modem.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 /ERRORREPORT:PROMPT opal.lib ptlib.lib wsock32.lib kernel32.lib user32.lib

gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib

На новом компе:
автор
/OUT:".\Release/t38modem.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:".\Release\t38modem.exe.intermediate.manifest"

/PDB:".\Release/t38modem.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 /ERRORREPORT:PROMPT opal.lib ptlib.lib wsock32.lib kernel32.lib

т.е. явная нехватка того что выделено, где эти API сидят.

Причем проблема точно не в проекте,
а в общих настройках студии или чего-то еще.

Куда я должен смотреть? В какие настройки?.
Dimitry Sibiryakov
Дата: 27.08.2014 23:11:24

Дмитрий77
Куда я должен смотреть? В какие настройки?.

Свойства проекта - линкер - библиотеки.

Posted via ActualForum NNTP Server 1.5

Дмитрий77
Дата: 27.08.2014 23:23:25
Dimitry Sibiryakov,

В Linker ->Input -> Additional Dependencies явно прописано:
opal.lib
ptlib.lib
wsock32.lib
а дальше стоит галка: Inherit from parent or project defaults.
И вот там на новом компе один kernel32.lib
а на старом целый список что уже приводил выше:
kernel32.lib, user32.lib, gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib

Где этот "project defaults"???
Я перерыл Tools -> Options но пока не нашел отличий.
Dimitry Sibiryakov
Дата: 27.08.2014 23:38:26

Дмитрий77
Где этот "project defaults"???

Забей. Добавь их прямо сюда.

Posted via ActualForum NNTP Server 1.5

Дмитрий77
Дата: 27.08.2014 23:50:26
Dimitry Sibiryakov
Забей. Добавь их прямо сюда.

Не, так не пойдет. Мне нужно воссоздать именно ту среду в кот. работал несколько лет.
Заколебусь в каждую модификацию проекта добавлять.
Это кстати то что мне не нравится в 2010 студии - там кажется нету "общих".
За годы я неоднократно сталкивался с ситуациями типа "на другом компе не работает" (в частности после каких-то обновлений виндов),то как у меня настроено на старом компе, все работает.

Где "общие настройки"? Или в каком файле, чтоб просто взять и мувнуть.
Дмитрий77
Дата: 28.08.2014 00:14:26
Вопрос вроде как решается переносом целиком папки

\Program Files\Microsoft Visual Studio 8\VC

со старого компа,
но хотелось бы понять причину.

Откуда этот "джентльменский набор" взялся:
kernel32.lib, user32.lib, gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib

потому как обычно я писал в файле проекта например
#include <Shlobj.h>
и мог использовать SHGetFolderPath после этого.

Но я ж могу взять другую API, кот. требует другую lib - не сглючит ли опять?
Дмитрий77
Дата: 28.08.2014 00:46:06
На старом компе файл
Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\corewin_express(Project Property File)
новее (2008г.),
<?xml version="1.0"?>
<VisualStudioPropertySheet 
	ProjectType="Visual C++" 
	Version="8.00" 
	Name="Core Windows Libraries">
	<Tool 
		Name="VCLinkerTool" 
		AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib" />
</VisualStudioPropertySheet>


а установился старый (2005г.)

Только вот с чем это есть и где это настраивается

Исходя из того факта, что API-шки я добавлял совсем недавно, а файл 2008г. а не 2014-го, допускаю мысль что на старом компе стоит более правильная версия VC++2005EE, которая обновлялась с MS как положено и результат мной контролировался,
Потому как счас ни одного обновления на тему VS2005 с MS не скачалось, видимо закончилась "поддержка" и XP, и 2005 и все через задницу, с трудом нашел пакет SP1, даже зарегистрироваться по честному не удалось, как писал об этом пару дней тому назад.


Оставлю ка я перенесенную папку целиком как было.
White Owl
Дата: 28.08.2014 00:48:29
Вот это одна из причин почему почему я ненавижу всяческие "студии".

Пишешь makefile, перечисляешь в нем все что нужно и все проблемы решены.
Дмитрий77
Дата: 28.08.2014 01:14:56
White Owl,

у меня самое интересное еще впереди.

Было пара обновлений, какие-то из этих (я их заблокировал на старом компе, поэтому старый комп их выводит через Update), вот они:

автор
Обновление для системы безопасности Microsoft Visual Studio .NET 2005 с пакетом обновления 1 (SP1) (KB971090)
Размер файла: 249.1 МБ , 5 мин
Исправлена проблема безопасности, наличие которой позволяло злоумышленнику проникнуть в используемую операционную систему Windows с установленным программным обеспечением Microsoft Visual Studio 2005 с пакетом обновления 1 (SP1) и полностью ее контролировать. Чтобы защитить компьютер, установите это обновление корпорации Майкрософт. После установки этого элемента, возможно, будет необходимо перезагрузить компьютер. Подробности...


Обновление системы безопасности для редактора XML Microsoft Visual Studio 2005 с пакетом обновления 1 (SP1) (KB2251481)
Размер файла: 13.5 МБ , менее 1 мин
Обнаружена проблема безопасности, ведущая к уязвимости внешней сущности XML (XXE). Чтобы защитить компьютер, установите это обновление Майкрософт. После установки этого элемента может потребоваться перезагрузка компьютера. Подробности...


Обновление системы безопасности для Microsoft Visual Studio 2005 с пакетом обновления 1 (KB2538218)
Размер файла: 249.8 МБ , 5 мин
Обнаружена проблема безопасности, ведущая к уязвимости приложения MFC для подмены библиотек DLL из-за того, что MFC не указывает полный путь к системным и используемым для локализации библиотекам DLL. Чтобы защитить компьютер, установите это обновление Майкрософт. После установки этого элемента может потребоваться перезагрузка компьютера. Подробности...


после которых exe-шники глобально не запускались на ДРУГИХ компах.

Тогда я "откатил".

Просто не знаю, схватил ли я сейчас эту дрянь или нет, надо проверять. SP1 то я установил, вопрос какое из них.
Судя по размерам "обновлений", там полные дистрибутивы заново втюхивались.
Dimitry Sibiryakov
Дата: 28.08.2014 02:00:05

Дмитрий77
после которых exe-шники глобально не запускались на ДРУГИХ компах.

Потому что C++ рантайм VS2005SP1 отличается от рантайма VS2005 без SP. Естественно
ехе-шники не запускаются без нужного им рантайма.

Posted via ActualForum NNTP Server 1.5