Example of THttpServer with exe.json usage (with ROOT_GENERATE_DICTIONARY)

Hello,
I have a problem when using exe.json with a method defined in a custom class MyTObject, I always get a 404 error, for example when doing a GET request (with auth login/pwd admin / abc) on http://localhost:8080/mytobject/exe.json?method=Foo.

Note:

  • built-in methods such as http://localhost:8080/mytobject/exe.json?method=Draw do not give a 404, but rather a succesful 200.

How to solve this?

(I haven’t found a full example of exe.json?method=Foo with a custom class in the tutorials, including CMakeLists and everything etc.)


Minimal reproducible example:

main.cpp

#include <TApplication.h>
#include <TGraph.h>
#include <THttpServer.h>
#include <iostream>
#include "MyTObject.h"
int main(int argc, char* argv[]) {
    TApplication app("app", &argc, argv);
    THttpServer *server = new THttpServer("http:8080?auth_file=.htdigest&auth_domain=localhost");
    server->SetReadOnly(kFALSE);
    TGraph *graph = new TGraph(10);
    MyTObject *myObj = new MyTObject();
    server->Register("/gr", graph);
    server->Register("/mytobject", myObj);
    server->Restrict("/mytobject", "allow=all");
    server->Restrict("/mytobject", "allow_method=Foo");
    std::cout << "HTTP server started at http://localhost:8080" << std::endl;
    app.Run(kTRUE);
    return 0;
}

MyTObject.h

#include <TObject.h>
#include <iostream>
class MyTObject: public TObject {    
public:
    float x, y, z;
    MyTObject() : x(0), y(0), z(0) {}
    Int_t Foo();
ClassDef(MyTObject, 1)
};

MyTObject.cpp

#include "MyTObject.h"
ClassImp(MyTObject)
Int_t MyTObject::Foo() {
    std::cout << "Hello world" << std::endl;
    return 0;
}

linkdef.h

#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class MyTObject+;
#endif

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
set(PROJECT_NAME test)
project(${PROJECT_NAME})
find_package(ROOT REQUIRED COMPONENTS RIO Net Hist Tree Gui RHTTP)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (MSVC)
    add_compile_options(/Zc:__cplusplus /std:c++17)
endif()
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
ROOT_GENERATE_DICTIONARY(MyTObjectDict MyTObject.h MODULE test LINKDEF LinkDef.h)
add_executable(test MyTObject.cpp MyTObjectDict.cxx main.cpp)
target_include_directories(test PRIVATE ${ROOT_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(test PRIVATE ${ROOT_LIBRARIES})
target_compile_options(${PROJECT_NAME} PRIVATE /MD)

.htdigest

admin:localhost:ea146eb872b5cc3e9a07e852b8eee910

(password is abc for user admin)

I can post a ZIP with all files for a minimal reproducible example, but currently I don’t have permission on the forum, could a moderator allow me to post an attachment or link? Thank you in advance!

Hi,

I can reproduce your problem and now investigating it.

1 Like

Hi,

There are several problems.

First of all, your object has to have unique name to be able address it via THttpServer.
Either you need to derived it from TNamed class or just provide GetName() method implementation like:

class MyTObject: public TObject {
public:
    float x, y, z;
    MyTObject() : x(0), y(0), z(0) {}
    const char *GetName() const override { return "myname"; }
    Int_t Foo();
    ClassDefOverride(MyTObject, 1)
};

Second, you need to put your dictionary to shared library, to correctly load and init it. In your cmake file you need to modify following entries:

add_library(mytobject SHARED MyTObject.cpp MyTObjectDict.cxx)
add_executable(test main.cpp)
target_include_directories(mytobject PRIVATE ${ROOT_INCLUDE_DIRS})
target_include_directories(test PRIVATE ${ROOT_INCLUDE_DIRS})
target_link_libraries(test PRIVATE ${ROOT_LIBRARIES} mytobject)

And finally, you have to provide correct URL to your object. When you call:

    server->Register("/mytobject", myObj);

This means register object myObj in sub-folder "/mytobject". Therefore full URL to execute method is:

http://localhost:8080/mytobject/myname/exe.json?method=Foo

Remove server->SetReadOnly(kFALSE) and server->Restrict("/mytobject", "allow=all"),
keep only server->Restrict("/mytobject", "allow_method=Foo"). This will allow to use only Foo method from your object.

Regards,
Sergey

Thank you very much @linev. I tried your modifications, and here is the final CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
set(PROJECT_NAME test)
project(${PROJECT_NAME})
find_package(ROOT REQUIRED COMPONENTS RIO Net Hist Tree Gui RHTTP)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (MSVC)
    add_compile_options(/Zc:__cplusplus /std:c++17)
endif()
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_library(mytobject SHARED MyTObject.cpp MyTObjectDict.cxx)
add_executable(test main.cpp)
target_include_directories(mytobject PRIVATE ${ROOT_INCLUDE_DIRS})
target_include_directories(test PRIVATE ${ROOT_INCLUDE_DIRS})
target_link_libraries(test PRIVATE ${ROOT_LIBRARIES} mytobject)
target_compile_options(${PROJECT_NAME} PRIVATE /MD)
ROOT_GENERATE_DICTIONARY(MyTObjectDict MyTObject.h MODULE test LINKDEF LinkDef.h)

(also tried with ROOT_GENERATE_DICTIONARY before add_library but the same)

but now I get lots of linking problems unresolved external symbol "public: int __cdecl ROOT::TGenericClassInfo::SetImplFile(char const *,int)" ..., error LNK2001: unresolved external symbol "public: __cdecl TVersionCheck::TVersionCheck(int)", …

Out of curiosity, in case you still have the files when you tried my example, would you have a minimal reproducible ZIP of the files?

Thank you again!

I build it on Linux and you are using Windows.
Here my tarball: app.tar.gz (1.6 KB)

Thank you @linev. Do you know someone using Windows that would know what it could be here?

Obviously some basic ROOT libraries are not linked.

Probably @bellenot can help you.

can you try to add this set_target_properties statement in your CMakeLists.txt, as:

add_library(mytobject SHARED MyTObject.cpp MyTObjectDict.cxx)
set_target_properties(mytobject PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)

and try again?

Thank you @bellenot. Same problem, even with this line:

MyTObject.cpp.obj : error LNK2019: unresolved external symbol "public: int __cdecl ROOT::TGenericClassInfo::SetImplFile(char const *,int)" (?SetImplFile@TGenericClassInfo@ROOT@@QEAAHPEBDH@Z) r
eferenced in function "void __cdecl ROOT::`anonymous namespace'::`dynamic initializer for 'R__dummyintdefault2''(void)" (??__ER__dummyintdefault2@?A0xe908d033@ROOT@@YAXXZ)
MyTObject.cpp.obj : error LNK2019: unresolved external symbol "public: __cdecl TVersionCheck::TVersionCheck(int)" (??0TVersionCheck@@QEAA@H@Z) referenced in function "void __cdecl ROOT::Intern
al::`dynamic initializer for 'gVersionCheck''(void)" (??__EgVersionCheck@Internal@ROOT@@YAXXZ)
MyTObjectDict.cxx.obj : error LNK2001: unresolved external symbol "public: __cdecl TVersionCheck::TVersionCheck(int)" (??0TVersionCheck@@QEAA@H@Z)
MyTObjectDict.cxx.obj : error LNK2019: unresolved external symbol "void __cdecl ROOT::Class_ShowMembers(class TClass *,void const *,class TMemberInspector &)" (?Class_ShowMembers@ROOT@@YAXPEAV
TClass@@PEBXAEAVTMemberInspector@@@Z) referenced in function "public: virtual void __cdecl MyTObject::ShowMembers(class TMemberInspector &)const " (?ShowMembers@MyTObject@@UEBAXAEAVTMemberInsp
ector@@@Z)
MyTObjectDict.cxx.obj : error LNK2019: unresolved external symbol "class ROOT::Internal::TInitBehavior const * __cdecl ROOT::Internal::DefineBehavior(void *,void *)" (?DefineBehavior@Internal@
ROOT@@YAPEBVTInitBehavior@12@PEAX0@Z) referenced in function "class ROOT::TGenericClassInfo * __cdecl ROOT::GenerateInitInstanceLocal(class MyTObject const *)" (?GenerateInitInstanceLocal@ROOT
@@YAPEAVTGenericClassInfo@1@PEBVMyTObject@@@Z)

and dozens of similar unresolved external symbol.

Does @linev’s .tar.gz tarball build successfully on Windows for you @bellenot ?

I didn’t try yet. I’ll try and let you know

1 Like

@linev @bellenot Alternatively, would it be possible to not make a SHARED library, and just use MyTObject in the main executable? If so, what would be the CMakeLists.txt?

I use SHARED library to correctly load and initialize dictionary.
Static linking didn’t work for me.

1 Like

Add:

target_link_libraries(mytobject PRIVATE ${ROOT_LIBRARIES})

Thank you @bellenot, it builds, but now it gives:

Any idea what it could be?

Would you have a minimal example of THttpServer with a custom class + exe.json?method=Foo that works on Windows? If you have a .zip or .tar.gz I would be very interested. Thanks a lot in advance!

How did you start the application? It works for me when starting it like this, after having called wherever\root\bin\thisroot.bat:

C:\root-dev\rootdev\forum\app\build>Release\test.exe
Info in <THttpEngine::Create>: Starting HTTP server on port 8080
HTTP server started at http://localhost:8080

Note that in order to be able to open the web page in the browser, I have to remove the ?auth_file=.htdigest&auth_domain=localhost part (i.e. simply THttpServer *server = new THttpServer("http:8080"); work). See

1 Like

There is surely a little something, but I don’t see exactly what… (maybe a single wrong line in CMakeLists.txt).

Note: in my case test.exe is not in build\Release\test.exe, but just in build\test.exe.
I use call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat" and cmake --build build. What do you use?

Could you send a .zip archive or .tar.gz containing the whole source (including CMakeLists etc.) @bellenot? Thanks again!

Here it is app.tar.bz2 (1.4 KB)
And I do:

C:\root-dev\rootdev\forum>cd app

C:\root-dev\rootdev\forum\app>mkdir build & cd build

C:\root-dev\rootdev\forum\app\build>cmake -Wno-dev -G"Visual Studio 17 2022" -A x64 -Thost=x64 -DCMAKE_VERBOSE_MAKEFILE=ON ..\
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.26100.
-- The C compiler identification is MSVC 19.43.34810.0
-- The CXX compiler identification is MSVC 19.43.34810.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.43.34808/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.43.34808/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (3.4s)
-- Generating done (0.1s)
-- Build files have been written to: C:/root-dev/rootdev/forum/app/build

C:\root-dev\rootdev\forum\app\build>cmake --build . --config Release
Change Dir: 'C:/root-dev/rootdev/forum/app/build'

Run Build Command(s): "C:/Program Files/Microsoft Visual Studio/2022/Community/MSBuild/Current/Bin/amd64/MSBuild.exe" ALL_BUILD.vcxproj /p:Configuration=Release /p:Platform=x64 /p:VisualStudioVersion=17.0 /v:n
MSBuild version 17.13.19+0d9f5a35a for .NET Framework
Build started 13/05/2025 15:38:19.

Project "C:\root-dev\rootdev\forum\app\build\ALL_BUILD.vcxproj" on node 1 (default targets).
Project "C:\root-dev\rootdev\forum\app\build\ALL_BUILD.vcxproj" (1) is building "C:\root-dev\rootdev\forum\app\build\ZERO_CHECK.vcxproj" (2) on node 1 (default targets).
PrepareForBuild:
  Creating directory "x64\Release\ZERO_CHECK\".
  Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://aka.ms/cpp/structured-output for more details.
  Creating directory "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\".
InitializeBuildStatus:
  Creating "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
  Touching "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
CustomBuild:
  1>Checking Build System
FinalizeBuildStatus:
  Deleting file "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
  Touching "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate".
Done Building Project "C:\root-dev\rootdev\forum\app\build\ZERO_CHECK.vcxproj" (default targets).

Project "C:\root-dev\rootdev\forum\app\build\ALL_BUILD.vcxproj" (1) is building "C:\root-dev\rootdev\forum\app\build\mytobject.vcxproj" (3) on node 1 (default targets).
PrepareForBuild:
  Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://aka.ms/cpp/structured-output for more details.
  Creating directory "C:\root-dev\rootdev\forum\app\build\Release\".
  Creating directory "mytobject.dir\Release\mytobject.tlog\".
InitializeBuildStatus:
  Creating "mytobject.dir\Release\mytobject.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
  Touching "mytobject.dir\Release\mytobject.tlog\unsuccessfulbuild".
CustomBuild:
  Generating MyTObjectDict.cxx, libtest_rdict.pcm, libtest.rootmap
  Building Custom Rule C:/root-dev/rootdev/forum/app/CMakeLists.txt
ClCompile:
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\CL.exe /c /I"C:\root-dev\rootdev\forum\app" /I"C:\root-dev\build\x64\release\include" /nologo /W1 /WX- /diagnostics:column /O2 /Ob2 /D
  _WINDLL /D _MBCS /D _XKEYCHECK_H /D NOMINMAX /D _CRT_SECURE_NO_WARNINGS /D _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING /D _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING /D NDEBUG /D "CMAKE_INTDIR=\"Release\"" /D mytobje
  ct_EXPORTS /EHsc /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /std:c++17 /Fo"mytobject.dir\Release\\" /Fd"mytobject.dir\Release\vc143.pdb" /external:W1 /Gd /TP /wd4141 /wd4291 /wd4244 /wd4049 /wd4146 /wd4250 /wd4624 /w
  d4267 /FIw32pragma.h /FIsehmap.h /errorReport:queue  -Zc:__cplusplus "C:\root-dev\rootdev\forum\app\MyTObject.cpp" "C:\root-dev\rootdev\forum\app\build\MyTObjectDict.cxx"
  MyTObject.cpp
  MyTObjectDict.cxx
  Generating Code...
PreLinkEvent:
  Auto build dll exports
  setlocal
  cd C:\root-dev\rootdev\forum\app\build
  if %errorlevel% neq 0 goto :cmEnd
  C:
  if %errorlevel% neq 0 goto :cmEnd
  "C:\Program Files\CMake\bin\cmake.exe" -E __create_def C:/root-dev/rootdev/forum/app/build/mytobject.dir/Release/exports.def C:/root-dev/rootdev/forum/app/build/mytobject.dir/Release//objects.txt
  if %errorlevel% neq 0 goto :cmEnd
  :cmEnd
  endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
  :cmErrorLevel
  exit /b %1
  :cmDone
  if %errorlevel% neq 0 goto :VCEnd
  :VCEnd
Link:
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\link.exe /ERRORREPORT:QUEUE /OUT:"C:\root-dev\rootdev\forum\app\build\Release\mytobject.dll" /INCREMENTAL:NO /NOLOGO "C:\root-dev\build
  \x64\release\lib\libCore.lib" "C:\root-dev\build\x64\release\lib\libImt.lib" "C:\root-dev\build\x64\release\lib\libRIO.lib" "C:\root-dev\build\x64\release\lib\libNet.lib" "C:\root-dev\build\x64\release\lib\libHist.lib" "C:\root-dev\b
  uild\x64\release\lib\libGraf.lib" "C:\root-dev\build\x64\release\lib\libGraf3d.lib" "C:\root-dev\build\x64\release\lib\libGpad.lib" "C:\root-dev\build\x64\release\lib\libROOTDataFrame.lib" "C:\root-dev\build\x64\release\lib\libTree.l
  ib" "C:\root-dev\build\x64\release\lib\libTreePlayer.lib" "C:\root-dev\build\x64\release\lib\libRint.lib" "C:\root-dev\build\x64\release\lib\libPostscript.lib" "C:\root-dev\build\x64\release\lib\libMatrix.lib" "C:\root-dev\build\x64\
  release\lib\libPhysics.lib" "C:\root-dev\build\x64\release\lib\libMathCore.lib" "C:\root-dev\build\x64\release\lib\libThread.lib" "C:\root-dev\build\x64\release\lib\libROOTVecOps.lib" "C:\root-dev\build\x64\release\lib\libGui.lib" "C
  :\root-dev\build\x64\release\lib\libRHTTP.lib" kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /DEF:"C:/root-dev/rootdev/forum/app/build/mytobject.dir/Release/expor
  ts.def" /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:"C:/root-dev/rootdev/forum/app/build/Release/mytobject.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:/root-dev/rootdev/foru
  m/app/build/Release/mytobject.lib" /MACHINE:X64  /machine:x64 /DLL mytobject.dir\Release\MyTObject.obj
  mytobject.dir\Release\MyTObjectDict.obj
     Creating library C:/root-dev/rootdev/forum/app/build/Release/mytobject.lib and object C:/root-dev/rootdev/forum/app/build/Release/mytobject.exp
  mytobject.vcxproj -> C:\root-dev\rootdev\forum\app\build\Release\mytobject.dll
PostBuildEvent:
  setlocal
  "C:\Program Files\CMake\bin\cmake.exe" -E copy C:/root-dev/rootdev/forum/app/build/libtest.rootmap C:/root-dev/rootdev/forum/app/build/Release/libtest.rootmap
  if %errorlevel% neq 0 goto :cmEnd
  "C:\Program Files\CMake\bin\cmake.exe" -E copy C:/root-dev/rootdev/forum/app/build/libtest_rdict.pcm C:/root-dev/rootdev/forum/app/build/Release/libtest_rdict.pcm
  if %errorlevel% neq 0 goto :cmEnd
  :cmEnd
  endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
  :cmErrorLevel
  exit /b %1
  :cmDone
  if %errorlevel% neq 0 goto :VCEnd
  :VCEnd
FinalizeBuildStatus:
  Deleting file "mytobject.dir\Release\mytobject.tlog\unsuccessfulbuild".
  Touching "mytobject.dir\Release\mytobject.tlog\mytobject.lastbuildstate".
Done Building Project "C:\root-dev\rootdev\forum\app\build\mytobject.vcxproj" (default targets).

Project "C:\root-dev\rootdev\forum\app\build\ALL_BUILD.vcxproj" (1) is building "C:\root-dev\rootdev\forum\app\build\test.vcxproj" (4) on node 1 (default targets).
PrepareForBuild:
  Creating directory "test.dir\Release\".
  Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://aka.ms/cpp/structured-output for more details.
  Creating directory "test.dir\Release\test.tlog\".
InitializeBuildStatus:
  Creating "test.dir\Release\test.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
  Touching "test.dir\Release\test.tlog\unsuccessfulbuild".
CustomBuild:
  Building Custom Rule C:/root-dev/rootdev/forum/app/CMakeLists.txt
ClCompile:
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\CL.exe /c /I"C:\root-dev\rootdev\forum\app" /I"C:\root-dev\build\x64\release\include" /nologo /W1 /WX- /diagnostics:column /O2 /Ob2 /D
  _MBCS /D _XKEYCHECK_H /D NOMINMAX /D _CRT_SECURE_NO_WARNINGS /D _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING /D _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING /D NDEBUG /D "CMAKE_INTDIR=\"Release\"" /EHsc /MD /GS /fp:pre
  cise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /std:c++17 /Fo"test.dir\Release\\" /Fd"test.dir\Release\vc143.pdb" /external:W1 /Gd /TP /wd4141 /wd4291 /wd4244 /wd4049 /wd4146 /wd4250 /wd4624 /wd4267 /FIw32pragma.h /FIsehmap.h /errorRep
  ort:queue  -Zc:__cplusplus "C:\root-dev\rootdev\forum\app\main.cpp"
  main.cpp
Link:
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\link.exe /ERRORREPORT:QUEUE /OUT:"C:\root-dev\rootdev\forum\app\build\Release\test.exe" /INCREMENTAL:NO /NOLOGO "C:\root-dev\build\x64\
  release\lib\libCore.lib" "C:\root-dev\build\x64\release\lib\libImt.lib" "C:\root-dev\build\x64\release\lib\libRIO.lib" "C:\root-dev\build\x64\release\lib\libNet.lib" "C:\root-dev\build\x64\release\lib\libHist.lib" "C:\root-dev\build\
  x64\release\lib\libGraf.lib" "C:\root-dev\build\x64\release\lib\libGraf3d.lib" "C:\root-dev\build\x64\release\lib\libGpad.lib" "C:\root-dev\build\x64\release\lib\libROOTDataFrame.lib" "C:\root-dev\build\x64\release\lib\libTree.lib" "
  C:\root-dev\build\x64\release\lib\libTreePlayer.lib" "C:\root-dev\build\x64\release\lib\libRint.lib" "C:\root-dev\build\x64\release\lib\libPostscript.lib" "C:\root-dev\build\x64\release\lib\libMatrix.lib" "C:\root-dev\build\x64\relea
  se\lib\libPhysics.lib" "C:\root-dev\build\x64\release\lib\libMathCore.lib" "C:\root-dev\build\x64\release\lib\libThread.lib" "C:\root-dev\build\x64\release\lib\libROOTVecOps.lib" "C:\root-dev\build\x64\release\lib\libGui.lib" "C:\roo
  t-dev\build\x64\release\lib\libRHTTP.lib" Release\mytobject.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='
  false'" /manifest:embed /PDB:"C:/root-dev/rootdev/forum/app/build/Release/test.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:/root-dev/rootdev/forum/app/build/Release/test.lib" /MACHINE:X64  /machine:x64 test.dir
  \Release\main.obj
  test.vcxproj -> C:\root-dev\rootdev\forum\app\build\Release\test.exe
FinalizeBuildStatus:
  Deleting file "test.dir\Release\test.tlog\unsuccessfulbuild".
  Touching "test.dir\Release\test.tlog\test.lastbuildstate".
Done Building Project "C:\root-dev\rootdev\forum\app\build\test.vcxproj" (default targets).

PrepareForBuild:
  Creating directory "x64\Release\ALL_BUILD\".
  Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://aka.ms/cpp/structured-output for more details.
  Creating directory "x64\Release\ALL_BUILD\ALL_BUILD.tlog\".
InitializeBuildStatus:
  Creating "x64\Release\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
  Touching "x64\Release\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild".
CustomBuild:
  Building Custom Rule C:/root-dev/rootdev/forum/app/CMakeLists.txt
FinalizeBuildStatus:
  Deleting file "x64\Release\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild".
  Touching "x64\Release\ALL_BUILD\ALL_BUILD.tlog\ALL_BUILD.lastbuildstate".
Done Building Project "C:\root-dev\rootdev\forum\app\build\ALL_BUILD.vcxproj" (default targets).


Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:04.05

And then I run:

C:\root-dev\rootdev\forum\app\build>Release\test.exe
Info in <THttpEngine::Create>: Starting HTTP server on port 8080
HTTP server started at http://localhost:8080

1 Like

Many thanks @bellenot!

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.