Реанимация сборки 1С++

Автор Djelf, 15 апреля 2024, 14:58

« назад - далее »

Djelf

Нужна помощь зала!

Может, кто-то из заглянувших на этот форум, еще имеет билд-машину?

Исходная тема тут: https://www.1cpp.ru/forum/YaBB.pl?num=1204706900

Что пока выяснено:
Судя по ошибкам VC, на VC2005 и VC2008, icpp (3я версия 1с++) ее перестали собирать и проверять с ~2010г.

Следовательно все сборки с 2010 были на ICL, который подобные ошибки игнорирует.
Но на ICL 9-10 icpp собирается, но не линкуется.
Если заставить линковаться (игнорировать дубли) то вылетает при загрузке.

Ошибки и т.п. тут не информативны, поэтому их пока не привожу.

Forum123

О том как собрать в 2005 или 2008

https://1cpp.ru/forum/YaBB.pl?num=1221910211  1С++ users forum › 1С++ и прочие расширения v7 › Разработка › Re: ProxyDataProvider

Под 2008 у меня собирается с такими каталогами:
Цитата:
Include Dirs=
F:\_BLD\_boost\boost_1_34_1;
C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\atl;
C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\mfc;
$(WindowsSdkDir)\include;
$(VCInstallDir)include;

т.е. crt и stl берется из комплекта 2008.
Думаю, что и для 2005 можно сделать то же самое.



Djelf

Это я читал, но это было в 2008 году, с последней версией icpp 3.2.4.3 это уже не работает.
Например, сейчас на VS2008:
hr = m_pReader->SetInput(pInputStream ? pInputStream : pStream);
XmlLiteReader.cpp(176) : error C2446: :: нет преобразования 'ATL::CComPtr<T>' в 'ATL::CComPtr<T>'
16 ошибок всего, можно пофиксить, но хотелось бы этого избежать и повторить оригинальную сборку.
Черт его знает что может в процессе фиксов сломаться...

Djelf

Собралось однако. Но я собирал под CodeBlock.
Это не так важно, но зато все флаги под моим контролем, а не под контролем IDE MSVC/

Некоторые проблемы есть, но собирается на ICL 10.1.014 и 11.1.054.
Выше/ниже версии выдают непонятные ошибки, ну и ладно.
Дополнение к рецепту сборки с форума 1с++

./system/GlobalMethods.cppvoid GetRTCFull(CRuntimeClass* rtc, CString& Str)...
- GetRTCFull(rtc->m_pfnGetBaseClass(), Str);
+ //GetRTCFull(rtc->m_pfnGetBaseClass(), Str);
это нигде не используется

PSDK2003\Include\atl\atlbase.h
- #pragma comment(lib, "atlthunk.lib")
+ //#pragma comment(lib, "atlthunk.lib")
где искать эту библиотеку неизвестно и она не нужна

Компилятор
+опции компиляции /Qms2 /Qvc8 /Zl /MD
ключ /Zl нужен для исключения линковки с  отдельно распространяемой dll`кой ICL, она тоже не нужна
/Qms2 /Qvc8 /MD но вы сами пробуйте сочетания и флаги...
boost будет ругаться на /Qvc8 ну и пусть ругается... это тоже ни на что не влияет

Итоговая строка компилятора такая:
icl.exe /nologo /Ob1 /O2 -W0 /Qwd1738,1744 /Qwe1011 /Qinline-max-size:100 /EHsc /Qms2 /Qvc8 /Zl /MD /D_AFXDLL /DWIN32 /DNDEBUG /D_ANSI /D_WINDOWS /D_USRDLL /D_AFX_DLL /D_ATL_STATIC_REGISTRY /D_WIN_DLL /D_STLP_USE_STATIC_LIB /D_STLP_VERBOSE_AUTO_LINK /D_STLP_NEW_PLATFORM_SDK /D_STLP_USING_PLATFORM_SDK_COMPILER    /I..\icpp_build /I..\boost_1_34_1 /I..\STLport-5.1.5\stlport /I..\..\Compillers\PSDK2003\Include /I..\..\Compillers\PSDK2003\Include\atl /I..\..\Compillers\PSDK2003\Include\mfc /I..\..\Compillers\MSVC98\Include /c AXControl.cpp /Fo"Release Win32\AXControl.obj"
AXControl.cpp

Линкер
+ /DEF:1CPP.DEF /BASE:"0x24000000" -qnoipo
Да, я отключил такой линкер, но возможно он сработает и 0.010% вы выиграите.

Итоговая строка линкера такая:
xilink.exe /dll /nologo /LIBPATH:..\STLport-5.1.5\lib /LIBPATH:..\..\Compillers\PSDK2003\Lib /LIBPATH:..\..\Compillers\MSVC98\Lib /LIBPATH:..\..\Compillers\MSVC98\MFC\Lib /LIBPATH:LIBS /LIBPATH:..\Boost\lib /LIBPATH:E:\b\Compillers\Intel10\Lib /out:"Release Win32\1CPP.dll"

АЛьФ


Djelf

А зачем нужен  /BASE:"0x24000000" ???
Я не понимаю... Я не настолько продвинутый...
Ну понятно, что если работает - "не  трожь", но зачем и почему?

Forum123

Цитата: Djelf от 18 апреля 2024, 18:37А зачем нужен  /BASE:"0x24000000"

Наверное что-то из:
How to create a project on STM32H745Zi-q with Ethernet ,lwip with RTO's? https://community.st.com/t5/stm32-mcus-embedded-software/how-to-create-a-project-on-stm32h745zi-q-with-ethernet-lwip-with/td-p/295437

[U-Boot-Users] Linux зависает https://lists.denx.de/pipermail/u-boot/2006-March/014035.html

Поиск что-то типа "RAM is pointing at 0x24000000'

Для MPU STM32H7A3ZI (например, Nucleo-H7A3ZI-Q) это неверно, поскольку «обычное» ОЗУ (не DTCRAM) начинается с адреса 0x24000000 и имеет размер 1024 КБ

trdm

О, можно будет обновить парсер и сделать его 1Cv8-подобным....

Djelf

Цитата: trdm от 19 апреля 2024, 14:26О, можно будет обновить парсер и сделать его 1Cv8-подобным....
О боже, только не это! Это слишком хардкорно :o
Есть же Класс "ПоставщикДанных" и "ПрямойЗапрос".
Начинать перенос 13к строк Класса "ПрямойЗапрос" из 1С 7.7 в С++ это крайне длительное и очень мучительное начало, а закончится это все равно неизбежным провалом.

Злоп

, а закончится это все равно
потому что тут нужны настоящие погромисты, а не 1Сники! ?

trdm

Цитата: Djelf от 19 апреля 2024, 15:05ПоставщикДанных
видел я этот класс, фигурные скобочки и все такое. еще больше руслиша.
не оценил...

АЛьФ

Цитата: trdm от 19 апреля 2024, 14:26О, можно будет обновить парсер и сделать его 1Cv8-подобным....

Это как? Судя по следующему комменту, не перевод на русский. Тогда что имеется в виду?

trdm

Цитата: АЛьФ от 19 апреля 2024, 17:01Это как? Судя по следующему комменту, не перевод на русский. Тогда что имеется в виду?
Хотелось бы:
1. Убрать латиницу: select, from, isFolder, isMark и Data_time_iddoc, ID, IDDOC
2. Убрать типизацию.
3. Разыменование, менеджер временных таблиц.
само собой, убирать не у одбцрекордсета, а у шлюза "ПрямойЗапрос8" к примеру.
4. конструктор нормальный, у меня qryConsole.dll не пашет.

Djelf

А за чей счет будет банкет?

trdm

Цитата: Djelf от 19 апреля 2024, 18:12А за чей счет будет банкет?
за счет заказчика как всегда :)