I managed to fix this with a pre-compiler conditional in mesos:\3rdparty\stout\include\stout\os\exec.hpp My C++ is extremely rusty, so not sure if this is the right fix to use, but it seems to work for me.
$ git diff 3rdparty/stout/include/stout/os/exec.hpp --- BEGIN GIT DIFF --- diff --git a/3rdparty/stout/include/stout/os/exec.hpp b/3rdparty/stout/include/stout/os/exec.hpp index 686e7a152..ea1b4b3fc 100644 --- a/3rdparty/stout/include/stout/os/exec.hpp +++ b/3rdparty/stout/include/stout/os/exec.hpp @@ -75,7 +75,16 @@ inline Option<int> spawn( // TODO(bmahler): Probably we shouldn't provide this windows // emulation and should instead have the caller use windows // subprocess functions directly? +#ifdef __WINDOWS__ +inline int execvp( + const std::string& file, + const std::vector<std::string>& argv); +#else inline int execvp(const char* file, char* const argv[]); +#endif // __WINDOWS__ + + + // This function is a portable version of execvpe ('p' means searching @@ -108,7 +117,15 @@ inline int execvp(const char* file, char* const argv[]); // TODO(bmahler): Probably we shouldn't provide this windows // emulation and should instead have the caller use windows // subprocess functions directly? +#ifdef __WINDOWS__ +inline int execvpe( + const std::string& file, + const std::vector<std::string>& argv, + const std::map<std::string, std::string>& envp); +#else inline int execvpe(const char* file, char** argv, char** envp); +#endif // __WINDOWS__ + } // namespace os { --- END GIT DIFF --- -----Original Message----- From: Chris Holman <Chris.Holman@eu.medical.canon> Sent: 01 December 2020 18:42 To: dev@mesos.apache.org Subject: Problems building HEAD of mesos 1.10.x branch Hi, I'm trying to build Windows Mesos Agent from the 1.10.x branch of the https://github.com/apache/mesos.git repo. My environment is as follows: * Windows Server 2019 * Visual Studio 2017 cd c:\temp git clone https://github.com/apache/mesos.git mkdir mesos\build cd mesos\build # Generate build scripts cmake .. -G "Visual Studio 15 2017" -A "x64" -DPATCHEXE_PATH="C:\ProgramData\chocolatey\lib\patch\tools\bin" -T host=x64 # Build mesos agent cmake --build . --target mesos-agent --config Release This is the version I started from: C:\temp\mesos>git log -n 1 commit 2c9e829067465f10bab22aba273e1e3a93f60770 (HEAD -> 1.10.x, origin/1.10.x) Author: Benjamin Mahler <bmah...@apache.org<mailto:bmah...@apache.org>> Date: Mon Oct 26 16:58:35 2020 -0400 Updated Postgres URL in CentOS 6 Dockerfile. The link was pointing to an rpm package that has since been replaced on the upstream server. I encountered a couple of compile and linker errors which I fixed along the way, but his last issue has me stumped: c:\temp\mesos\3rdparty\stout\include\stout\exit.hpp(69): warning C4722: '__Exit::~__Exit': destructor never returns, potential memory leak [C:\temp\mesos\build\src\launcher\mesos-executor.vcxproj] mesos.lib(launch.obj) : error LNK2019: unresolved external symbol "int __cdecl os::execvp(char const *,char * const * const)" (?execvp@os@@YAHPEBDQEBQEAD@Z) referenced in function "protected: virtual int __cdecl mesos::internal::slave:: MesosContainerizerLaunch::execute(void)" (?execute@MesosContainerizerLaunch@slave@internal@mesos@@MEAAHXZ) [C:\temp\mesos\build\src\launcher\mesos-executor.vcxproj] mesos.lib(launch.obj) : error LNK2019: unresolved external symbol "int __cdecl os::execvpe(char const *,char * *,char * *)" (?execvpe@os@@YAHPEBDPEAPEAD1@Z) referenced in function "protected: virtual int __cdecl mesos::internal::slave:: MesosContainerizerLaunch::execute(void)" (?execute@MesosContainerizerLaunch@slave@internal@mesos@@MEAAHXZ) [C:\temp\mesos\build\src\launcher\mesos-executor.vcxproj] C:\temp\mesos\build\src\mesos-executor.exe : fatal error LNK1120: 2 unresolved externals [C:\temp\mesos\build\src\launcher\mesos-executor.vcxproj] I can see that the Windows implementation of os::execvp and os::execvpe is different to the linux implementation: Windows: C:\temp\mesos\3rdparty\stout\include\stout\os\windows\exec.hpp inline int execvp( const std::string& file, const std::vector<std::string>& argv) { exit(os::spawn(file, argv, None()).getOrElse(-1)); return -1; } inline int execvpe( const std::string& file, const std::vector<std::string>& argv, const std::map<std::string, std::string>& envp) { exit(os::spawn(file, argv, envp).getOrElse(-1)); return -1; } C:\temp\mesos\3rdparty\stout\include\stout\os\posix\exec.hpp (formatted to make it easier to compare.) inline int execvp( const char* file, char* const argv[]) { return ::execvp(file, argv); } inline int execvpe( const char* file, char** argv, char** envp) { char** saved = os::raw::environment(); *os::raw::environmentp() = envp; int result = execvp(file, argv); *os::raw::environmentp() = saved; return result; } The calls being made to these functions use the posix version of the function. I'm not sure how this branch could ever have compiled/linked unless perhaps you are using VC2019 and it somehow magically resolves this for you? Q: Has anybody built branch 1.10.x for Windows Mesos Agent recently? Regards, Chris Holman