w0wbagger 6 Posted yesterday at 06:28 AM Hey folks, finally have a spare weekend to attempt installing ICS v9.4 on C++ Builder v12.3, but having some issues. I just tried installing in RAD Studio 12.3 with both the April and May patches installed using C++ Builder. I was attempting to compile using the 32-bit clang (not classic) C++ Compiler. The install group did not work at all, and when I tried to install one part at a time, I was able to compile and link IcsCommonCBNewRun.cbproj, but when attempting to compile and install IcsCommonCBNewDesign.cbproj I kept getting: invalid argument 'k' Specifically, this is the command-line compiler line (see the extraneous '-k' in the end? c:\program files (x86)\embarcadero\studio\23.0\bin\bcc32c.exe -cc1 -D _DEBUG -D SECURITY_WIN32 -D USE_SSL -D MSWINDOWS -D FRAMEWORK_VCL -D USEPACKAGES -output-dir ..\Lib\Debug\Win32\23.0 -I "c:\program files (x86)\embarcadero\studio\23.0\include" -I C:\usr\Src\3rdPartyVCL\ics\Packages -I ..\Source -I ..\Lib\Debug\Win32 -isystem "c:\program files (x86)\embarcadero\studio\23.0\include" -isystem "c:\program files (x86)\embarcadero\studio\23.0\include\dinkumware64" -isystem "c:\program files (x86)\embarcadero\studio\23.0\include\windows\crtl" -isystem "c:\program files (x86)\embarcadero\studio\23.0\include\windows\sdk" -isystem "c:\program files (x86)\embarcadero\studio\23.0\include\windows\rtl" -isystem "c:\program files (x86)\embarcadero\studio\23.0\include\windows\vcl" -isystem "c:\program files (x86)\embarcadero\studio\23.0\include\windows\fmx" -isystem C:\Users\Public\Documents\Embarcadero\Studio\23.0\hpp\Win32 -isystem C:\usr\Src\3rdPartyVCL\DevExpress\VCL\Library\RS29 -isystem "C:\usr\Src\3rdPartyVCL\MyDAC for RAD Studio\Include\Win32" -isystem "C:\usr\Src\3rdPartyVCL\UniDAC for RAD Studio 12\Include\Win32" -isystem "C:\usr\Src\3rdPartyVCL\Fast Reports VCL\2025.2.2\Sources\LibRS29\VCL\Win32" -isystem C:\Users\Public\Documents\Embarcadero\Studio\23.0\hpp\Win32 -debug-info-kind=standalone -fcxx-exceptions -fborland-extensions -nobuiltininc -nostdsysteminc -triple i686-pc-windows-omf -emit-obj -mrelocation-model static -masm-verbose -ffunction-sections -fexceptions -fseh -mstack-alignment=16 -fno-spell-checking -fno-use-cxa-atexit -fno-threadsafe-statics -main-file-name IcsCommonCBNewDesign.cpp -x c++ -std=c++17 -O0 -fmath-errno -tP -tD -tM -tU -o ..\Lib\Debug\Win32\23.0\IcsCommonCBNewDesign.obj --auto-dependency-output -MT ..\Lib\Debug\Win32\23.0\IcsCommonCBNewDesign.obj -k IcsCommonCBNewDesign.cpp I'm wondering if this is a a bug in 12.3? I tried compiling this from the command line without the -k and it compiled fine. Does anyone know why it might be adding the -k? bcc32c.exe says that -k is a valid flag, but I'm wondering if that's just a holdover from the classic version. it says -k is "generate standard stack frames", but that option is set to "false" in the project option. I don't understand enough about components (at the moment, at least, trying to use ChatGPT to help me here) to get this to work easily. Would appreciate any suggestions - I'll stick with this, I can't upgrade to 12.3 until I get this working for our app. Cheers, I. Share this post Link to post
w0wbagger 6 Posted yesterday at 06:45 AM For this project (ICSCommonCBNewDesign.cbproj), under options/Building/C++ Compiler/Advanced, there is an option "Additional options to pass to the compiler". There was a '-k' in there that needs to be removed. When I removed it, it compiled and installed. Moving on to VCLNewRun and VCLNewDesign. 1 Share this post Link to post
Angus Robertson 646 Posted yesterday at 07:58 AM Thanks, I'll remove the -k flag. I was able to build V9,4 for D12.3 OK, but Embarcadero was not, which is why it's not in GetIt. For C++ Win64 old, I get four unresolved external errors I don't understand, and Win64 Modern fails completely because the compiler does not export the correct symbol files, reported last year but not fixed in D12.3, yet. Angus 1 Share this post Link to post
w0wbagger 6 Posted yesterday at 03:46 PM Understood. For my purposes, I just need to get it working in 32-bit, but it's the only component pack I use that's keeping us from moving to 64-bit, so I'll keep my eye on that once I've got 32-bit working. Thanks, Angus. My first attempt at compiling icsVclCBNewRun resulted in this: [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicstypes [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsticks64 [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsutils [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicscharsetutils [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicswinsock [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsftpsrvt [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicszlibhigh [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsstreams [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsonetimepw [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsmd5 [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicscrc [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsssleay [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicswsockbuf [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicswebsession [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsformdatadecoder [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicshtmlpars [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsurl [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsmimeutils [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicsntlmmsgs [ld.lld Error] ld.lld: error: undefined symbol: __init_record_Overbyteicssspi [ld.lld Error] ld.lld: error: too many errors emitted, stopping now (use /errorlimit:0 to see all errors) Investigating now. Share this post Link to post
w0wbagger 6 Posted yesterday at 04:10 PM Solved this too: Project was not finding the icsVclCBCommonRun.bpi, which was created by that project in C:\Users\Public\Documents\Embarcadero\Studio\23.0\Dcp I added it to my global Libraries path in RAD Studio (although I could also have added it just to the project), and it compiled. I noticed that when compiling 64x, it puts the .bpi files in C:\Users\Public\Documents\Embarcadero\Studio\23.0\Dcp\Win64x, but it does *not* put the 32-bit one in C:\Users\Public\Documents\Embarcadero\Studio\23.0\Dcp\Win32 - maybe it should, and then we could add to Libraries C:\Users\Public\Documents\Embarcadero\Studio\23.0\Dcp\$(Platform) ? On to Design. Share this post Link to post
w0wbagger 6 Posted yesterday at 04:27 PM Getting closer. I was able to compile icsVCLCBNewRun and icsVCLCBNewDesign after wrestling a bit with paths in the project, but it failed on installing the components with "Cannot load package 'IcsVCLCBNewRun290'. It contains 'OverbyteicsLogger', which is also contained in the package 'icsCommonCBNewDesign290'.. This is where my lack of understanding of creating/installing components is evident. Any ideas? I'll keep trying with the LLMs. Share this post Link to post
w0wbagger 6 Posted 23 hours ago (edited) Edited to remove: LLM sent me down the wrong track. Edited 23 hours ago by w0wbagger Share this post Link to post
w0wbagger 6 Posted 22 hours ago (edited) Okay! I've figured out why this was happening. There are a few units for which *only* the .dcr files are included in the icsCommonCBNewRun.cbproj file. Missing from the project file: OverbyteICSLogger.pas OverbyteICSMimeDec.pas OverbyteICSMimeUtils.pas OverbyteICSPing.pas OverbyteICSTimeList.pas In the case if OverbyteICSPing, the .dcr appears in both Common and VCL, but the .pas only appears in VCL. I don't know if it's meant to be in Common or VCL, but it probably shouldn't appear in both. For testing, I'm going to take it out of the VCL, but please let me know. I made these changes, and it compiled and installed in the 32-bit compiler. Will test with my application, but if it works it seems like we might be able to start using this new IDE! Let me know if you need further testing, after making these changes, Angus. Maybe we can get this on GetIt after all. Cheers, Ian Edited 22 hours ago by w0wbagger 1 Share this post Link to post
Angus Robertson 646 Posted 22 hours ago Before I comment any further, can you please confirm you are using ICS from the overnight zip or icsv94.zip or SVN? ICSCommonCBNewDesign.cbproj should be dated February or March 2025, and contains the XML line: <BCC_UserSuppliedOptions> -r</BCC_UserSuppliedOptions> I don't see any -k. So it would appear you are working with some other version of ICS. Angus Share this post Link to post
w0wbagger 6 Posted 22 hours ago (edited) I was using the overnight from 05/17/2025. ICSCommonCBNewDesign.cbproj is dated 02/10/2025 the '-k' shows up in this one. I can try to pull the most recent overnight and try again. Edited 22 hours ago by w0wbagger Share this post Link to post
Angus Robertson 646 Posted 22 hours ago I've just built V9.5 for Win32 using C++12.3 without any errors, just a couple of deprecated warnings. As I did before the V9.4 release. I have removed the -r argument. So maybe you had old versions of these files somewhere, I'll be updating SVN in the next few days, and I'll make sure my work C++ library files are in the SVN directory. Angus Share this post Link to post
w0wbagger 6 Posted 22 hours ago Roger that. I've just pulled down the overnight, am clearing all my directories, and will try again with these files. Share this post Link to post
w0wbagger 6 Posted 22 hours ago (edited) Hey Angus, this is in the IcsCommonCBNewDesign.cbproj file that I just downloaded from the overnights: <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''"> <BCC_Defines>_DEBUG;$(BCC_Defines);$(BCC_Defines)</BCC_Defines> <BCC_UseClassicCompiler>false</BCC_UseClassicCompiler> <BCC_UserSuppliedOptions> -k</BCC_UserSuppliedOptions> <BPILibOutputDir>$(BDSCOMMONDIR)\BPL\$(Platform)\$(ProductVersion)</BPILibOutputDir> <DynamicRTL>false</DynamicRTL> <ILINK_Description>Overbyte ICS Common Design-Time Package for C++ Builder</ILINK_Description> </PropertyGroup> Also confirming that the .dcr file for ICSPing is still hanging out there alone in the CommonCBNewDesign.cbproj with no .pas file. TimeList, MimeDec, MimeUtils, and Logger correctly include the .pas in this file. Maybe your configuration ignores the spare .dcr file for some reason? Which project file should ICSPing.pas be in? common or VCL/FMX? (I haven't tested FMX yet because I don't use it, but happy to help debug it as well for other potential users). Edited to add: The difference is in whether you're doing debug or release compilation. Release has -r (which I guess is okay?), and debug has -k (which is not) Edited 22 hours ago by w0wbagger Share this post Link to post
w0wbagger 6 Posted 21 hours ago FWIW, got these three *warnings* when compiling VCLNew - not critical, but FYI: [DCC Warning] OverbyteIcsDnsQuery.pas(2248): Symbol 'StrLen' is deprecated: 'Moved to the AnsiStrings unit' [DCC Warning] OverbyteIcsDnsQuery.pas(2249): Symbol 'StrCopy' is deprecated: 'Moved to the AnsiStrings unit' [DCC Warning] OverbyteIcsMQTT.pas(1159): Comparison always evaluates to True For the last line, it's referring to this, specifically the first comparator. Because we've just done an and $03, x will always be >= 0, so: x := ReadByte (FRxStream) and $03; // V9.5 v3.1.1 may return x80 for failure if (x >= 0) and (x <= 2) then could become: x := ReadByte (FRxStream) and $03; // V9.5 v3.1.1 may return x80 for failure if x <= 2 then to eliminate the warning. Share this post Link to post
w0wbagger 6 Posted 21 hours ago (edited) Verdict: Can confirm that if I remove the ICSPing.dcr file from the Common project file and the -k from the debug compilation additional parameters, it compiles fine in both debug and release modes, 32-bit. Will try FMX next. Then, will remove everything one more time and try the single-installation method. Edit to add: FMX installed correctly out of the box. Edited 21 hours ago by w0wbagger 1 Share this post Link to post
Angus Robertson 646 Posted 5 hours ago I've removed the unwanted DCR and -k, did not show up because Build Groups stops on the first error, so never got to build all the different versions. I fixed the MQTT warning yesterday and have just done the AnsiString warnings, so C++ Win32 now builds without any warnings or errors. Win64 fails completely because dcc64.exe seems to have disappeared with D12.3, think they want us to use Win64 Modern only now, but I get the same error with Win64 Modern. Sorry, no time to mess any more now. Can not upload anything to SVN until I've finished some testing, early next week. Angus Share this post Link to post