Cross-compiling VMWare View for ARM Linux (in Debian/Ubuntu)

Earlier this month, I wrote an article about PCoIP Technology which shows an Android application (VMWare View) running on an OMAP4 Tablet displaying a Windows 7 desktop. This remote desktop technology relies on a powerful server to do the processing and thin clients (in that case Tablets) to display the desktop. Since only pixels are transferred any OS (supported by the server) could be displayed in the thin client.

That made me wonder if there was an open source PCoIP client that could run on low end Linux client such as the Raspberry Pi. VMWare View Open Client provides just what we need, but is only available in source code so we need to cross-compile it for ARM or build it in an ARM machine. Today, I’ll show the instructions I followed to cross-compile it for ARM in Debian using Emdebian Toolchain.

First download and extract VMware View Open Client 4.5 source code:


Install some tools on the build machine:


and some ARM libraries and development packages:

sudo /usr/share/pdebuild-cross/xapt -a armel libicu-dev libcurl3-dev libgtk2.0-0 libboost-signals-dev

Finally, configure, build and install VMWare Open Client:


That’s it! VMWare View for ARM is now ready. You just need to copy the files in the installation directory to your target board.
I have tried it in my Raspberry Pi emulator and after installation some libraries (libcurl3 and libboost-signals1.42.0), vmware-view could run (Screenshot below).

VMWare View in Raspberry Pi Emulator
VMWare View Open Client in QEMU (Debian ARMv6 CPU)

So we now have VMWare View (PCoIP client) running in an ARM emulator, we should then able to “run” any OS – such as Windows 8 – in the Raspberry Pi or other low-end thin clients. Of course, this method only makes sense if you need several thin clients with one server. I have not not fully tested this with a VMWare server, but I’ll surely have a try once the Raspberry Pi board and Windows 8 Consumer Preview are released later this month.

Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.

Support CNX Software - Donate via PayPal, become a Patron on Patreon, or buy review samples
Subscribe
Notify of
guest
47 Comments
oldest
newest most voted
John U
John U
8 years ago

That sounds interesting.

I just found out about Raspberry pi and the first thing that came in to my mind was a pcoip client running on it.
Raspberry pi + some fullhd display + keyb + mouse would be a cheap alternative to Samsung NC240 pcoip display.

Juli3n
Juli3n
8 years ago

Hi!

It’s a very interesting subject that could be use on many products. In my case I tried so hard to cross-compil Vmware view to run on a Wyse T50, but I failed…
I hope that i will find a solution, I’m working on it…

Thanks for this instructions.

Yann
Yann
8 years ago

Hi, working together with juli3n, (with your clever guidelines) and we both need a hand to setup cross-compiling platform (debian squeeze) :

checking for uidna_IDNToASCII in -licuuc… no : configure: error: libicu is required, but not found.
checked, libicu-dev & libicu-dev-armel-cross set up

Please help, you seem to know well how to set up perfectly squeeze ! is there any lack or newer package to set up ?

Thanks for your advices

Yann
Yann
8 years ago

Of course, it exists but native PCOIP doesn’t work, only RDP (We get Remote KMS Container Error from View Server, on the other hand it works on windows thin clients). Well, here is the detailed error point : checking for uidna_IDNToASCII in -licuuc configure:10883: g++ -o conftest -g -O2 -DBUILT_BY_root -L/usr/arm-linux-gnueabi/lib conftest.cpp -licuuc -licudata >&5 /usr/bin/ld: skipping incompatible /usr/arm-linux-gnueabi/lib/libicuuc.so when searching for -licuuc /usr/bin/ld: skipping incompatible /usr/arm-linux-gnueabi/lib/libicuuc.a when searching for -licuuc /usr/bin/ld: skipping incompatible /usr/arm-linux-gnueabi/lib/libicudata.so when searching for -licudata /usr/bin/ld: skipping incompatible /usr/arm-linux-gnueabi/lib/libicudata.a when searching for -licudata /usr/bin/ld: skipping incompatible /usr/arm-linux-gnueabi/lib/libm.so when searching for -lm /usr/bin/ld: skipping incompatible /usr/arm-linux-gnueabi/lib/libc.so when… Read more »

Fernando
Fernando
8 years ago

Hello,

I am trying to follow your ‘how to’ but when I try to run the ./configure command I get a message indicating that glib-2.0 and gmodule-2.0 are missing. Any tip on how to install them?

Thank you

morris
morris
8 years ago

Hello, I am trying to follow your HOWTO to porting VMware-view for ARM , But i got the problem when install Emdebian Toolchain , I run # apt-get install pdebuild-cross dpkg-cross and got the messages below. [email protected]:/home/test/Desktop# apt-get install pdebuild-cross Reading package lists… Done Building dependency tree Reading state information… Done pdebuild-cross is already the newest version. You might want to run ‘apt-get -f install’ to correct these: The following packages have unmet dependencies: dpkg-cross : Depends: libdebian-dpkgcross-perl (= 2.5.8) but it is not installable libconfig-auto-perl : Depends: libconfig-inifiles-perl but it is not going to be installed Depends: libxml-simple-perl but… Read more »

morris
morris
8 years ago

hi , I am trying to Cross-compiling VMWare View for ARM Linux follow your howto. but i got the message when run LDFLAGS=”-L/usr/arm-linux-gnueabi/lib -lboost_signals” ./configure –target=arm-linux-gnueabi \ –host=arm-linux-gnueabi –prefix=/home/jaufranc/edev/vmware-client –with-boost-signals=no error massage as below . checking for C compiler default output file name… configure: error: C compiler cannot create executables see ‘config.log’ for more details. on config.log file , it seems missing -lboost_signals , message as below . Thread model: posix gcc version 4.4.5 (Debian 4.4.5-8) configure:3844: $? = 0 configure:3851: arm-linux-gnueabi-gcc -V >&5 arm-linux-gnueabi-gcc: ‘-V’ option must have argument configure:3854: $? = 1 configure:3877: checking for C compiler default… Read more »

morris
morris
8 years ago

@ cnxsoft

hello ,
tks, the embedian toolchain already installed.

morris
morris
8 years ago

cnxsoft :@ morris Try to run “apt-get -f install” to complete the installation.

hello ,
tks, the embedian toolchain already installed.

morris
morris
8 years ago

cnxsoft :@ morris I had a display problem and the line below did not show entirely: sudo /usr/share/pdebuild-cross/xapt -a armel libicu-dev libcurl3-dev libgtk2.0-0 libboost-signals-devTry to run this again, before running the configure part. hi , thks your help , I had run sudo /usr/share/pdebuild-cross/xapt -a armel libicu-dev libcurl3-dev libgtk2.0-0 libboost-signals-dev but got warning message below ——————————————————————— After this operation, 333 MB of additional disk space will be used. WARNING: The following packages cannot be authenticated! libc-bin gcc-4.4-base libc6 libgcc1 libattr1 libacl1 libselinux1 coreutils libbz2-1.0 zlib1g liblzma2 xz-utils dpkg perl-base liblocale-gettext-perl libtext-iconv-perl libtext-charwidth-perl libtext-wrapi18n-perl debconf-i18n debconf libgdbm3 libslang2 libnewt0.52 libpopt0 libssl0.9.8… Read more »

morris
morris
8 years ago

hello , thanks your help !

i got the new problem , when run

LDFLAGS=”-L/usr/arm-linux-gnueabi/lib -lboost_signals” ./configure –target=arm-linux-gnueabi \
–host=arm-linux-gnueabi –prefix=/home/jaufranc/edev/vmware-client –with-boost-signals=no

Result : checking for uidna_IDNToASCII in -licuuc… no
configure: error: libicu is required, but not found. Check config.log for details.

i had install libicu using ” apt-get install libicu-dev ” , but got the same error messages.

Any tips or hints? Thanks!

morris
morris
8 years ago

cnxsoft :@ morris As usual you need to check the config.log. If uidna_IDNToASCII is really missing, then you need to cross-compile another version of libicu with the function, either a newer one or an older one. hi , i had installed another version of libicu but got the same error. i tried to trace the “configure” file, i discovered that the problem as below . script source code : fi ac_ext=cpp ac_cpp=’$CXXCPP $CPPFLAGS’ ac_compile=’$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5′ ac_link=’$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5′ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat >conftest.$ac_ext <>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include… Read more »

morris
morris
8 years ago

cnxsoft :@ morris I can’t see the error part in config.log. Maybe the best would be for you to provide me a link with your full config.log, or copy it in pastebin.com.

Thank you for this tutorial.

Could you please provide your mail address ?

morris
morris
8 years ago

hi , thanks for your help .

i had through ./configure , make , make install , i copy the files to my target board , run ./vmware-view , i got error message below ,

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/armvm/bin # ./vmware-view
./vmware-view: error while loading shared libraries: libboost_signals.so.1.42.0:
cannot open shared object file: No such file or directory
/armvm/bin #
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

How to install libcurl3 and libboost-signals1.42.0 on target board ?
i have no apt-get command on my target .

Any suggestion/hint is really appreciated.

morris
morris
8 years ago

cnxsoft :@ morris If you don’t have package manager on your board, you may have to cross-compile all dependencies (boost_signal, GTK, curL…).What’s your board and Linux distribution ?

host : debian 6.0.3

Target : TI8168 EVM board

# uname -a
Linux (none) 2.6.37 #7 Mon May 28 18:07:13 CST 2012 armv7l GNU/Linux

Alexander
Alexander
7 years ago

Hi! While tried to compile this I got this errors: /usr/bin/ld: skipping incompatible /usr/arm-linux-gnueabi/lib/libboost_signals.so when searching for -lboost_signals /usr/bin/ld: skipping incompatible /usr/arm-linux-gnueabi/lib/libboost_signals.a when searching for -lboost_signals /usr/bin/ld: vmware_view-cdkUrl.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: vmware_view-cdkUrl.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: vmware_view-cdkUrl.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: vmware_view-cdkUrl.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: vmware_view-cdkUrl.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: vmware_view-cdkUrl.o: Relocations in generic ELF (EM: 40) vmware_view-cdkUrl.o: could not read symbols: File in wrong format collect2: ld returned 1 exit status make[2]: *** [vmware-view] Error 1 make[2]: Leaving directory /root/VMware-view-open-client-source-4.5.0-297975' make[1]: ***… Read more »

Asanga Jay
Asanga Jay
7 years ago

So could this be applied to a chromebook with Debian installed?

Chad Douglas
Chad Douglas
7 years ago

So, have you actually connected to a VMware View server that uses PCoIP exclusively?

All the research I’ve been able to do on this says that the open client does View over RDP only. I’m exploring this as an option here at my University, and we definitely need PCoIP support.

Also, have you tested this on actual Raspberry Pi hardware? (Either Rev A or B?)

w-tom
7 years ago

hi。I am so sad!When I do : xapt -a armel libicu-dev libcurl3-dev libgtk2.0-0 libboost-signals-dev。
Package libicu-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Unable to locate package armel
E: Package ‘libicu-dev’ has no installation candidate
others is the same!
please help me !thank you!

w-tom
7 years ago

hi。i am sorry。help me once more。thank you very much。
checking whether sys/ucontext.h defines REG_EAX… no
checking unicode/uidna.h usability… no
checking unicode/uidna.h presence… no
checking for unicode/uidna.h… no
configure: error: libicu is required, but not found. Check config.log for details.
why?thank you a lot。

w-tom
7 years ago

./configure –target=arm-linux-gnueabi –host=arm-linux-gnueabi –prefix=/home/user/edev/vmware-client –with-boost-signals=no

Result :
checking whether sys/ucontext.h defines REG_EAX… yes
checking unicode/uidna.h usability… yes
checking unicode/uidna.h presence… yes
checking for unicode/uidna.h… yes
checking for uidna_IDNToASCII in -licuuc… no configure: error: libicu is required, but not found. Check config.log for details.
why?thank you。

w-tom
7 years ago

configure:10888: g++ -o conftest -g -O2 -I/usr/arm/include -DBUILT_BY_root -L/usr/arm/lib conftest.cpp -lsicuuc -lsicudata >&5
/usr/bin/ld: skipping incompatible /usr/arm/lib/libsicuuc.a when searching for -lsicuuc
/usr/bin/ld: cannot find -lsicuuc
/usr/bin/ld: skipping incompatible /usr/arm/lib/libsicudata.a when searching for -lsicudata
/usr/bin/ld: cannot find -lsicudata
collect2: ld returned 1 exit status
configure:10894: $? = 1

this is the config。log

w-tom
7 years ago

LDFLAGS=”-L/usr/arm-linux-gnueabi/lib -lboost_signals”

why do you use -lboost_signals? sorry idont konw。can you tell me。thank you
and when i do make。i meet this question 。

Unknown EABI object attribute 44

/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: libz.so.1, needed by /chroot/natty_armel/usr/lib/libcurl.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: Warning: /chroot/natty_armel/usr/lib/libcurl.so: Unknown EABI object attribute 44
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: Warning: /chroot/natty_armel/usr/lib/libssl.a(ssl_lib.o): Unknown EABI object attribute 44
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: Warning: /chroot/natty_armel/usr/lib/libssl.a(ssl_cert.o): Unknown EABI object attribute 44
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: Warning: /chroot/natty_armel/usr/lib/libssl.a(ssl_sess.o): Unknown EABI object attribute 44
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: Warning: /chroot/natty_armel/usr/lib/libssl.a(ssl_ciph.o): Unknown EABI object attribute 44
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: Warning: /chroot/natty_armel/usr/lib/libssl.a(s3_pkt.o): Unknown EABI object attribute 44

w-tom
7 years ago

vmware_view-baseApp.o: In function cdk::BaseApp::IntegrateGLibLogging()':
/VMware-view-open-client-source-4.5.0-297975/baseApp.cc:110: undefined reference to
g_set_printerr_handler’
/VMware-view-open-client-source-4.5.0-297975/baseApp.cc:111: undefined reference to g_log_set_default_handler'
vmware_view-baseXml.o: In function
cdk::BaseXml::OnSslCtx(BasicHttpRequest*, void*, void*)’:
/VMware-view-open-client-source-4.5.0-297975/baseXml.cc:1071: undefined reference to g_module_open'
/VMware-view-open-client-source-4.5.0-297975/baseXml.cc:1073: undefined reference to
g_module_symbol’
/VMware-view-open-client-source-4.5.0-297975/baseXml.cc:1074: undefined reference to g_module_close'
vmware_view-baseXml.o: In function
cdk::BaseXml::GetChildContentUInt64(_xmlNode*, char const*)’:
/VMware-view-open-client-source-4.5.0-297975/baseXml.cc:1454: undefined reference to g_ascii_strtoull'
vmware_view-baseXml.o: In function
cdk::BaseXml::Encode(std::basic_string<char, std::char_traits, std::allocator > const&)’:
/VMware-view-open-client-source-4.5.0-297975/baseXml.cc:419: undefined reference to xmlEncodeSpecialChars'
/VMware-view-open-client-source-4.5.0-297975/baseXml.cc:422: undefined reference to
xmlFree’
vmware_view-baseXml.o: In function signal3':
/chroot/natty_armel/usr/include/boost/signals/signal_template.hpp:197: undefined reference to
boost::signals::detail::signal_base::signal_base(boost::function2 const&, boost::any const&)’

Serge
Serge
6 years ago

on Ubuntu 12.04 Error arm-linux-gnueabi-gcc -DPACKAGE_NAME=\”VMware-view-open-client\” -DPACKAGE_TARNAME=\”VMware-view-open-client-source\” -DPACKAGE_VERSION=\”4.5.0-297975\” -DPACKAGE_STRING=\”VMware-view-open-client\ 4.5.0-297975\” -DPACKAGE_BUGREPORT=\”http://code.google.com/p/vmware-view-open-client/issues/entry\” -DVIEW_GTK=1 -DVIEW_POSIX=1 -DPACKAGE=\”VMware-view-open-client-source\” -DVERSION=\”4.5.0-297975\” -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LOCALE_H=1 -DHAVE_LC_MESSAGES=1 -DHAVE_BIND_TEXTDOMAIN_CODESET=1 -DHAVE_GETTEXT=1 -DHAVE_DCGETTEXT=1 -DENABLE_NLS=1 -DHAVE_BOOST= -DPRODUCT_VIEW_CLIENT_NAME=\”VMware\ View\ Open\ Client\” -DVIEW_CLIENT_VERSION_NUMBER=\”4.5.0\” -DVMX86_TOOLS=1 -DVMX86_DEBUG=1 -DVMX86_DEVEL=1 -DVMX86_STATS=1 -DDEBUG_STUB_ACCESS_IO_PORTS=1 -DVMX86_LOG=1 -DDEBUG_STUB=1 -D_XOPEN_SOURCE=500 -D_BSD_SOURCE=1 -D_SVID_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DHAVE_LSEEK=1 -DHAVE_UIDNA_IDNTOASCII=1 -DHAVE_DLFCN_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_LOCALTIME_R=1 -I. -I./lib/open-vm-tools/include -I./lib/bora/include -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -DGLIBC_VERSION_21 -DGLIBC_VERSION_22 -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -DBUILT_BY_user -g -O2 -MT lib/open-vm-tools/misc/libMisc_a-hashTable.o -MD -MP -MF lib/open-vm-tools/misc/.deps/libMisc_a-hashTable.Tpo -c -o lib/open-vm-tools/misc/libMisc_a-hashTable.o test -f 'lib/open-vm-tools/misc/hashTable.c' || echo './'lib/open-vm-tools/misc/hashTable.c /tmp/cc1Hc9Hu.s: Assembler messages: /tmp/cc1Hc9Hu.s:2137: Error: selected processor… Read more »

Advertisements