One further note on this-- I have now successfully built and run the
64-bit version of vncviewer using MinGW64.  The version of the compiler
I'm using is mingw-w64-1.0-bin_i686-mingw_20100405.zip, which I just
unzipped into c:\mingw.  It seems that this version defines
CLSID_ActiveDesktop in its include files, but it doesn't seem to have
any libraries that can allow one to successfully resolve the definition
at link time.  Thus, the build system will try to build vncconfig and
winvnc, but it will fail with:

"undefined reference to CLSID_ActiveDesktop" and
"undefined reference to IID_IActiveDesktop"

I have attempted adding -luuid and -lshell32 to the link line.  Those
libraries are where CLSID_ActiveDesktop and IID_IActiveDesktop are
defined in Visual C++.

On 5/14/10 2:35 AM, DRC wrote:
> I suspect that I'm the first person to have ever attempted to build the
> TigerVNC Windows components on an actual Windows machine using MinGW, so
> I thought I'd share my experience thus far.
> 
> I already have a MinGW build environment that I use to build
> libjpeg-turbo, so the first thing I tried was using that environment.
> My build environment uses the stock MSYS 1.0.11 and MSYS Developer
> Toolkit (DTK) 1.0.1 distributions, both installed from the .exe's
> provided by the MinGW project.  I don't use the provided installer .exe
> for MinGW, because it contains an older version of GCC (3.4.5).
> libjpeg-turbo needs GCC >= 4.1 for best performance, so I use an updated
> toolchain based on GCC 4.4.0.  The MinGW installer .exe is no longer
> being supported by the MinGW Project.  They are supposedly working on a
> new apt-get-like mechanism, but until they get this online, it is
> necessary to install the more recent toolchains by hand.  Specifically,
> the components necessary to run the GCC 4.4.0 toolchain are:
> 
> binutils-2.20-1-mingw32-bin.tar.gz
> gcc-c++-4.4.0-mingw32-bin.tar.gz
> gcc-c++-4.4.0-mingw32-dll.tar.gz
> gcc-core-4.4.0-mingw32-bin.tar.gz
> gcc-core-4.4.0-mingw32-dll.tar.gz
> gmp-4.2.4-mingw32-dll.tar.gz
> mingwrt-3.17-mingw32-dev.tar.gz
> mingwrt-3.17-mingw32-dll.tar.gz
> mpfr-2.4.1-mingw32-dll.tar.gz
> w32api-3.14-mingw32-dev.tar.gz
> 
> (NOTE: you can add http://prdownloads.sf.net/mingw/ in front of any of
> the components in this list or any of the other lists below to download
> the component directly.)
> 
> The first problem I ran into was that the MSYS DTK installs autoconf and
> automake but not autopoint (which is part of gettext.)  gettext is
> available as a separate tarball, but the version provided in the tarball
> is not compatible with the older autotools provided in the MSYS DTK
> installer.  Thus, I had to uninstall the MSYS DTK and install the
> following updated DTK components manually:
> 
> autoconf-2.65-1-msys-1.0.13-bin.tar.lzma
> automake-1.11.1-1-msys-1.0.13-bin.tar.lzma
> cvs-1.12.13-1-msys-1.0.11-bin.tar.lzma
> gettext-0.17-1-msys-1.0.11-bin.tar.lzma
> gettext-0.17-1-msys-1.0.11-dev.tar.lzma
> libcrypt-1.1_1-3-msys-1.0.13-dll-0.tar.lzma
> libtool-2.2.7a-2-msys-1.0.13-bin.tar.lzma
> m4-1.4.13-1-msys-1.0.11-bin.tar.lzma
> perl-5.6.1_2-2-msys-1.0.13-bin.tar.lzma
> 
> This allowed me to successfully autoreconf the source.
> 
> Now I tried building it.  The build ran almost through to completion but
> failed when linking vncviewer.  After much googling, the failure was
> discovered to be caused by an error in
> C:\mingw\lib\gcc\mingw32\4.4.0\libstdc++.la.  Line 11 points to the DLL
> version of libstdc++, not the static version, but the DLL version of
> libstdc++ is not included in any of the GCC 4.4.0 toolchain packages
> (that is a known issue for this toolchain.)  I edited the offending line
> to read
> 
> library_names='libstdc++_s.a'
> 
> Huzzah.  Successfully built and ran vncviewer, but not winvnc because of
> the afore-mentioned CLSID_ActiveDesktop issue.
> 
> In the interest of attempting to find an easier procedure for other
> developers, I then tried using the stock GCC 3.4.5 toolchain installed
> by the MinGW integrated installer (MinGW-5.1.6.exe.)  This built
> vncviewer with no problems, but of course the performance of the
> resulting executable was reduced.
> 
> I then tried the most recent toolchain, GCC 4.5.0, which can be
> downloaded using the mingwdl.sh script found here:
> 
> http://www.mingw.org/wiki/HOWTO_Install_the_MinGW_GCC_Compiler_Suite
> 
> The GCC 4.5.0 packages include the libstdc++ DLL as well as a compiler
> switch to force the use of the static version of libstdc++.
> 
> When using this toolchain, I got some weird linker errors when trying to
> link vncviewer:
> 
> Info: resolving vtable for __cxxabiv1::__vmi_class_type_info by linking
> to __imp___ZTVN10__cxxabiv121__vmi_class_type_infoE (auto-import)
> Info: resolving vtable for __cxxabiv1::__si_class_type_info by linking
> to __imp___ZTVN10__cxxabiv120__si_class_type_infoE (auto-import)
> Info: resolving vtable for __cxxabiv1::__class_type_info by linking to
> __imp___ZTVN10__cxxabiv117__class_type_infoE (auto-import)
> c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe:
> warning: auto-importing has been activated without --enable-auto-import
> specified on the command line.
> 
> Then when I actually tried to run vncviewer, I got an error dialog: "The
> application failed to initialize properly (0xc0000005)."  Ugh.
> 
> Additionally, it's worthy of note that autotools is tortuously slow on
> Windows.  It takes something like 20 minutes to configure and build just
> vncviewer.
> 
> So, the basic problems are as follows:
> 
> (1) Only a very specific MinGW toolchain can be made to work with our
> build, and even that requires some tweaking (editing libstdc++.la.)
> 
> (2) This allows only a subset of the Windows components to be built.
> 
> (3) The toolchain is a pain to install.
> 
> (4) The performance of the toolchain is unacceptable.
> 
> I understand everyone's general aversion to Visual C++ and the desire to
> have an integrated build system, but it also seems really bad that the
> only viable way to build the Windows code is by using Linux.
> 
> In terms of best practices, I don't see any other big open source code
> bases using autotools and MinGW to produce Windows executables.  I now
> know why.
> 
> DRC
> 
> 
> ------------------------------------------------------------------------------
> 
> _______________________________________________
> Tigervnc-devel mailing list
> Tigervnc-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/tigervnc-devel

------------------------------------------------------------------------------

_______________________________________________
Tigervnc-devel mailing list
Tigervnc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tigervnc-devel

Reply via email to