LibVNC / libvncserver

LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.
GNU General Public License v2.0
1.11k stars 483 forks source link

Unable to cross compile from Ubuntu 18.04 to Windows #378

Closed ajhalls closed 4 years ago

ajhalls commented 4 years ago

I am wanting to try using this in a Windows application and tried compiling on Ubuntu.

I installed the prerequisites first: apt install -y cmake ffmpeg libavcodec-dev libavformat-dev libavutil-dev libevent-pthreads-2.1-6 libgnutls28-dev libgnutls28 libjpeg-dev liblzo2-dev libpng-dev libsdl2-dev libswscale-dev libsystemd-dev lzo

From the libvncserver directory I perform:

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .

I get the error:


CMake Error at /usr/share/cmake-3.10/Modules/CMakeTestCCompiler.cmake:52 (message):
  The C compiler

    "/usr/bin/cc"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /root/libvncserver-master/build/CMakeFiles/CMakeTmp

    Run Build Command:"/usr/bin/make" "cmTC_495c6/fast"
    /usr/bin/make -f CMakeFiles/cmTC_495c6.dir/build.make CMakeFiles/cmTC_495c6.dir/build
    make[1]: Entering directory '/root/libvncserver-master/build/CMakeFiles/CMakeTmp'
    Building C object CMakeFiles/cmTC_495c6.dir/testCCompiler.c.obj
    /usr/bin/cc    -o CMakeFiles/cmTC_495c6.dir/testCCompiler.c.obj   -c /root/libvncserver-master/build/CMakeFiles/CMakeTmp/testCCompiler.c
    Linking C executable cmTC_495c6.exe
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_495c6.dir/link.txt --verbose=1
    /usr/bin/cmake -E remove -f CMakeFiles/cmTC_495c6.dir/objects.a
    /usr/bin/ar cr CMakeFiles/cmTC_495c6.dir/objects.a @CMakeFiles/cmTC_495c6.dir/objects1.rsp
    /usr/bin/cc      -Wl,--whole-archive CMakeFiles/cmTC_495c6.dir/objects.a -Wl,--no-whole-archive  -o cmTC_495c6.exe -Wl,--out-implib,libcmTC_495c6.dll.a -Wl,--major-image-version,0,--minor-image-version,0 
    /usr/bin/ld: unrecognized option '--major-image-version'
    /usr/bin/ld: use the --help option for usage information
    collect2: error: ld returned 1 exit status
    CMakeFiles/cmTC_495c6.dir/build.make:98: recipe for target 'cmTC_495c6.exe' failed
    make[1]: *** [cmTC_495c6.exe] Error 1
    make[1]: Leaving directory '/root/libvncserver-master/build/CMakeFiles/CMakeTmp'
    Makefile:126: recipe for target 'cmTC_495c6/fast' failed
    make: *** [cmTC_495c6/fast] Error 2

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:3 (project)

-- Configuring incomplete, errors occurred!
See also "/root/libvncserver-master/build/CMakeFiles/CMakeOutput.log".
See also "/root/libvncserver-master/build/CMakeFiles/CMakeError.log".

When I do a cmake .. first though, it seems to do better:

root@Jet-2U /root/libvncserver-master/build cmake ..
-- The C compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 
-- Found LZO: /usr/lib/x86_64-linux-gnu/liblzo2.so
-- Found JPEG: /usr/lib/x86_64-linux-gnu/libjpeg.so  
-- Performing Test FOUND_LIBJPEG_TURBO
-- Performing Test FOUND_LIBJPEG_TURBO - Success
-- Found PNG: /usr/lib/x86_64-linux-gnu/libpng.so (found version "1.6.34") 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Found SDL2: /usr/lib/x86_64-linux-gnu/libSDL2main.a;/usr/lib/x86_64-linux-gnu/libSDL2.so;-lpthread  
-- Found GnuTLS: /usr/lib/x86_64-linux-gnu/libgnutls.so (found version "3.5.18") 
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1") 
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Checking for module 'libsystemd'
--   Found libsystemd, version 237
-- Found FFMPEG: /usr/include/x86_64-linux-gnu (found suitable version "3.4.6-0ubuntu0.18.04.1", minimum required is "3.1.0") found components:  avformat avcodec avutil swscale 
-- Looking for dirent.h
-- Looking for dirent.h - found
-- Looking for endian.h
-- Looking for endian.h - found
-- Looking for fcntl.h
-- Looking for fcntl.h - found
-- Looking for netinet/in.h
-- Looking for netinet/in.h - found
-- Looking for sys/endian.h
-- Looking for sys/endian.h - not found
-- Looking for sys/socket.h
-- Looking for sys/socket.h - found
-- Looking for sys/stat.h
-- Looking for sys/stat.h - found
-- Looking for sys/time.h
-- Looking for sys/time.h - found
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for sys/wait.h
-- Looking for sys/wait.h - found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for sys/resource.h
-- Looking for sys/resource.h - found
-- Looking for vfork.h
-- Looking for vfork.h - not found
-- Looking for ws2tcpip.h
-- Looking for ws2tcpip.h - not found
-- Looking for arpa/inet.h
-- Looking for arpa/inet.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for gettimeofday
-- Looking for gettimeofday - found
-- Looking for vfork
-- Looking for vfork - found
-- Looking for vprintf
-- Looking for vprintf - found
-- Looking for mmap
-- Looking for mmap - found
-- Looking for fork
-- Looking for fork - found
-- Looking for ftime
-- Looking for ftime - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for gethostname
-- Looking for gethostname - found
-- Looking for inet_ntoa
-- Looking for inet_ntoa - found
-- Looking for memmove
-- Looking for memmove - found
-- Looking for memset
-- Looking for memset - found
-- Looking for mkfifo
-- Looking for mkfifo - found
-- Looking for select
-- Looking for select - found
-- Looking for socket
-- Looking for socket - found
-- Looking for strchr
-- Looking for strchr - found
-- Looking for strcspn
-- Looking for strcspn - found
-- Looking for strdup
-- Looking for strdup - found
-- Looking for strerror
-- Looking for strerror - found
-- Looking for strstr
-- Looking for strstr - found
-- Looking for htobe64
-- Looking for htobe64 - found
-- Looking for OSSwapHostToBigInt64
-- Looking for OSSwapHostToBigInt64 - not found
-- Building crypto with OpenSSL
-- Check size of pid_t
-- Check size of pid_t - done
-- Check size of size_t
-- Check size of size_t - done
-- Check size of socklen_t
-- Check size of socklen_t - done
-- Check size of in_addr_t
-- Check size of in_addr_t - done
-- Check if the system is big endian
-- Searching 16 bit integer
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Using unsigned short
-- Check if the system is big endian - little endian
-- Building TLS with GnuTLS
-- Configuring done
-- Generating done
-- Build files have been written to: /root/libvncserver-master/build

root@Jet-2U /root/libvncserver-master/build cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
-- Building crypto with OpenSSL
-- Building TLS with GnuTLS
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_TOOLCHAIN_FILE

-- Build files have been written to: /root/libvncserver-master/build
root@Jet-2U /root/libvncserver-master/build cmake --build .
Scanning dependencies of target vncserver
[  1%] Building C object CMakeFiles/vncserver.dir/libvncserver/main.c.o
[  2%] Building C object CMakeFiles/vncserver.dir/libvncserver/rfbserver.c.o
[  3%] Building C object CMakeFiles/vncserver.dir/libvncserver/rfbregion.c.o
[  4%] Building C object CMakeFiles/vncserver.dir/libvncserver/auth.c.o
[  5%] Building C object CMakeFiles/vncserver.dir/libvncserver/sockets.c.o
[  6%] Building C object CMakeFiles/vncserver.dir/libvncserver/stats.c.o
[  7%] Building C object CMakeFiles/vncserver.dir/libvncserver/corre.c.o
[  8%] Building C object CMakeFiles/vncserver.dir/libvncserver/hextile.c.o
[  9%] Building C object CMakeFiles/vncserver.dir/libvncserver/rre.c.o
[ 10%] Building C object CMakeFiles/vncserver.dir/libvncserver/translate.c.o
[ 11%] Building C object CMakeFiles/vncserver.dir/libvncserver/cutpaste.c.o
[ 12%] Building C object CMakeFiles/vncserver.dir/libvncserver/httpd.c.o
[ 13%] Building C object CMakeFiles/vncserver.dir/libvncserver/cursor.c.o
[ 14%] Building C object CMakeFiles/vncserver.dir/libvncserver/font.c.o
[ 15%] Building C object CMakeFiles/vncserver.dir/libvncserver/draw.c.o
[ 16%] Building C object CMakeFiles/vncserver.dir/libvncserver/selbox.c.o
[ 17%] Building C object CMakeFiles/vncserver.dir/common/vncauth.c.o
[ 18%] Building C object CMakeFiles/vncserver.dir/libvncserver/cargs.c.o
[ 19%] Building C object CMakeFiles/vncserver.dir/libvncserver/ultra.c.o
[ 20%] Building C object CMakeFiles/vncserver.dir/libvncserver/scale.c.o
[ 21%] Building C object CMakeFiles/vncserver.dir/common/crypto_openssl.c.o
[ 22%] Building C object CMakeFiles/vncserver.dir/libvncserver/rfbssl_gnutls.c.o
[ 23%] Building C object CMakeFiles/vncserver.dir/libvncserver/zlib.c.o
[ 24%] Building C object CMakeFiles/vncserver.dir/libvncserver/zrle.c.o
[ 25%] Building C object CMakeFiles/vncserver.dir/libvncserver/zrleoutstream.c.o
[ 26%] Building C object CMakeFiles/vncserver.dir/libvncserver/zrlepalettehelper.c.o
[ 27%] Building C object CMakeFiles/vncserver.dir/libvncserver/tight.c.o
[ 28%] Building C object CMakeFiles/vncserver.dir/common/turbojpeg.c.o
[ 29%] Building C object CMakeFiles/vncserver.dir/libvncserver/tightvnc-filetransfer/rfbtightserver.c.o
[ 30%] Building C object CMakeFiles/vncserver.dir/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c.o
[ 31%] Building C object CMakeFiles/vncserver.dir/libvncserver/tightvnc-filetransfer/filetransfermsg.c.o
[ 32%] Building C object CMakeFiles/vncserver.dir/libvncserver/tightvnc-filetransfer/filelistinfo.c.o
[ 33%] Building C object CMakeFiles/vncserver.dir/libvncserver/websockets.c.o
[ 34%] Building C object CMakeFiles/vncserver.dir/libvncserver/ws_decode.c.o
[ 35%] Building C object CMakeFiles/vncserver.dir/common/base64.c.o
[ 36%] Linking C shared library libvncserver.so
[ 36%] Built target vncserver
Scanning dependencies of target vncclient
[ 37%] Building C object CMakeFiles/vncclient.dir/libvncclient/cursor.c.o
[ 38%] Building C object CMakeFiles/vncclient.dir/libvncclient/listen.c.o
[ 39%] Building C object CMakeFiles/vncclient.dir/libvncclient/rfbproto.c.o
[ 40%] Building C object CMakeFiles/vncclient.dir/libvncclient/sockets.c.o
[ 41%] Building C object CMakeFiles/vncclient.dir/libvncclient/vncviewer.c.o
[ 42%] Building C object CMakeFiles/vncclient.dir/common/crypto_openssl.c.o
[ 43%] Building C object CMakeFiles/vncclient.dir/common/turbojpeg.c.o
[ 44%] Building C object CMakeFiles/vncclient.dir/libvncclient/tls_gnutls.c.o
[ 45%] Linking C shared library libvncclient.so
[ 45%] Built target vncclient
Scanning dependencies of target test_wstest
[ 46%] Building C object CMakeFiles/test_wstest.dir/test/wstest.c.o
[ 47%] Linking C executable test/wstest
[ 47%] Built target test_wstest
Scanning dependencies of target test_tjbench
[ 48%] Building C object CMakeFiles/test_tjbench.dir/test/tjbench.c.o
[ 49%] Building C object CMakeFiles/test_tjbench.dir/test/tjutil.c.o
[ 50%] Building C object CMakeFiles/test_tjbench.dir/test/bmp.c.o
[ 51%] Building C object CMakeFiles/test_tjbench.dir/common/turbojpeg.c.o
[ 52%] Linking C executable test/tjbench
[ 52%] Built target test_tjbench
Scanning dependencies of target test_tjunittest
[ 52%] Building C object CMakeFiles/test_tjunittest.dir/test/tjunittest.c.o
[ 53%] Building C object CMakeFiles/test_tjunittest.dir/test/tjutil.c.o
[ 54%] Building C object CMakeFiles/test_tjunittest.dir/common/turbojpeg.c.o
[ 55%] Linking C executable test/tjunittest
[ 55%] Built target test_tjunittest
Scanning dependencies of target test_encodingstest
[ 56%] Building C object CMakeFiles/test_encodingstest.dir/test/encodingstest.c.o
[ 57%] Linking C executable test/encodingstest
[ 57%] Built target test_encodingstest
Scanning dependencies of target test_cargstest
[ 58%] Building C object CMakeFiles/test_cargstest.dir/test/cargstest.c.o
[ 59%] Linking C executable test/cargstest
[ 59%] Built target test_cargstest
Scanning dependencies of target client_examples_vnc2mpg
[ 60%] Building C object CMakeFiles/client_examples_vnc2mpg.dir/client_examples/vnc2mpg.c.o
[ 61%] Linking C executable client_examples/vnc2mpg
[ 61%] Built target client_examples_vnc2mpg
Scanning dependencies of target client_examples_backchannel
[ 62%] Building C object CMakeFiles/client_examples_backchannel.dir/client_examples/backchannel.c.o
[ 63%] Linking C executable client_examples/backchannel
[ 63%] Built target client_examples_backchannel
Scanning dependencies of target examples_example
[ 64%] Building C object CMakeFiles/examples_example.dir/examples/example.c.o
[ 65%] Linking C executable examples/example
[ 65%] Built target examples_example
Scanning dependencies of target examples_colourmaptest
[ 66%] Building C object CMakeFiles/examples_colourmaptest.dir/examples/colourmaptest.c.o
[ 67%] Linking C executable examples/colourmaptest
[ 67%] Built target examples_colourmaptest
Scanning dependencies of target examples_backchannel
[ 68%] Building C object CMakeFiles/examples_backchannel.dir/examples/backchannel.c.o
[ 69%] Linking C executable examples/backchannel
[ 69%] Built target examples_backchannel
Scanning dependencies of target test_copyrecttest
[ 70%] Building C object CMakeFiles/test_copyrecttest.dir/test/copyrecttest.c.o
[ 71%] Linking C executable test/copyrecttest
[ 71%] Built target test_copyrecttest
Scanning dependencies of target examples_simple15
[ 72%] Building C object CMakeFiles/examples_simple15.dir/examples/simple15.c.o
[ 73%] Linking C executable examples/simple15
[ 73%] Built target examples_simple15
Scanning dependencies of target examples_camera
[ 74%] Building C object CMakeFiles/examples_camera.dir/examples/camera.c.o
[ 75%] Linking C executable examples/camera
[ 75%] Built target examples_camera
Scanning dependencies of target examples_filetransfer
[ 76%] Building C object CMakeFiles/examples_filetransfer.dir/examples/filetransfer.c.o
[ 77%] Linking C executable examples/filetransfer
[ 77%] Built target examples_filetransfer
Scanning dependencies of target examples_pnmshow
[ 78%] Building C object CMakeFiles/examples_pnmshow.dir/examples/pnmshow.c.o
[ 79%] Linking C executable examples/pnmshow
[ 79%] Built target examples_pnmshow
Scanning dependencies of target examples_vncev
[ 80%] Building C object CMakeFiles/examples_vncev.dir/examples/vncev.c.o
[ 81%] Linking C executable examples/vncev
[ 81%] Built target examples_vncev
Scanning dependencies of target examples_fontsel
[ 82%] Building C object CMakeFiles/examples_fontsel.dir/examples/fontsel.c.o
[ 83%] Linking C executable examples/fontsel
[ 83%] Built target examples_fontsel
Scanning dependencies of target examples_pnmshow24
[ 84%] Building C object CMakeFiles/examples_pnmshow24.dir/examples/pnmshow24.c.o
[ 85%] Linking C executable examples/pnmshow24
[ 85%] Built target examples_pnmshow24
Scanning dependencies of target client_examples_ppmtest
[ 86%] Building C object CMakeFiles/client_examples_ppmtest.dir/client_examples/ppmtest.c.o
[ 87%] Linking C executable client_examples/ppmtest
[ 87%] Built target client_examples_ppmtest
Scanning dependencies of target examples_rotate
[ 88%] Building C object CMakeFiles/examples_rotate.dir/examples/rotate.c.o
[ 89%] Linking C executable examples/rotate
[ 89%] Built target examples_rotate
Scanning dependencies of target examples_regiontest
[ 90%] Building C object CMakeFiles/examples_regiontest.dir/examples/regiontest.c.o
[ 91%] Linking C executable examples/regiontest
[ 91%] Built target examples_regiontest
Scanning dependencies of target examples_blooptest
[ 92%] Building C object CMakeFiles/examples_blooptest.dir/examples/blooptest.c.o
[ 93%] Linking C executable examples/blooptest
[ 93%] Built target examples_blooptest
Scanning dependencies of target examples_repeater
[ 94%] Building C object CMakeFiles/examples_repeater.dir/examples/repeater.c.o
[ 95%] Linking C executable examples/repeater
[ 95%] Built target examples_repeater
Scanning dependencies of target client_examples_SDLvncviewer
[ 95%] Building C object CMakeFiles/client_examples_SDLvncviewer.dir/client_examples/SDLvncviewer.c.o
[ 96%] Linking C executable client_examples/SDLvncviewer
[ 96%] Built target client_examples_SDLvncviewer
Scanning dependencies of target examples_simple
[ 97%] Building C object CMakeFiles/examples_simple.dir/examples/simple.c.o
[ 98%] Linking C executable examples/simple
[ 98%] Built target examples_simple
Scanning dependencies of target examples_storepasswd
[ 99%] Building C object CMakeFiles/examples_storepasswd.dir/examples/storepasswd.c.o
[100%] Linking C executable examples/storepasswd
[100%] Built target examples_storepasswd

However, no dll or exe files are created. I do get this new set of files in the ./examples directory, but am unsure what I would do with them, or if they are actually anything at all since I didn't strictly follow the documentation.

root@Jet-2U /root/libvncserver-master/build/examples ls
backchannel  blooptest  camera  colourmaptest  example  filetransfer  fontsel  pnmshow  pnmshow24  regiontest  repeater  rotate  simple  simple15  storepasswd  vncev

Running on Ubuntu 18.04 with gcc info:

Using built-in specs.
COLLECT_GCC=/usr/bin/cc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1) 
bk138 commented 4 years ago

It looks like you're missing the actual crosscompiler. What about sudo apt install mingw-w64?

ajhalls commented 4 years ago

You were absolutely right. I suggest adding the following to the install instructions:

apt install -y cmake ffmpeg libavcodec-dev libavformat-dev libavutil-dev libevent-pthreads-2.1-6 libgnutls28-dev libgnutls28 libjpeg-dev liblzo2-dev libpng-dev libsdl2-dev libswscale-dev libsystemd-dev lzo mingw-w64

bk138 commented 4 years ago

The crosscompiler won't be able to use, i.e. link to, the mentioned -dev packages, so just adding mingw-w64.