[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
setting up an environment for cross-compiling static libssh-projects
  [Thread Prev] | [Thread Next]
 
 
- Subject: setting up an environment for cross-compiling static libssh-projects
- From: "Daniel Brodt" <danielbrodt1@xxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Sat, 28 Oct 2017 15:05:52 +0200
- To: <libssh@xxxxxxxxxx>
 
Hi everybody,
 
my goal ist to create an environment for cross-compiling static
libssh-projects.
*         cross-compilation: host: linux (ubuntu), target: windows 64bit,
architecture x86
*         static: no dynamic libraries needed during runtime nor compilation
time
*         libssh1, no libssh2: I do need server support too.
To reach my goal I spent days (two weeks now) for theory and praxis, but I
couldn't get there. Before I list what I did so far, my questions:
1.       Could u tell me, what I did wrong and what  I need to do/change and
of course why?
2.       Could u write a (quick) mini HOW-TO for this purpose with all third
library dependencies (libz, libssl) with standard directory configurations 
 
What I did so far: Latest I set up a new VM with Ubuntu (untouched system).
Then:
#sudo apt-get install mingw-64
#sudo apt-get install cmake
So mingw is located in /usr/bin    /usr/x86_64-w64-mingw32/include
/usr/x86_64-w64-mingw32/lib
Dowloading tarballs for zlib, openssl and libssh and taring them in
/home/affenarsch/Downloads then cd to zlib and:
#sed -e s/"PREFIX ="/"PREFIX = x86_64-w64-mingw32-"/ -i win64/Makefile.gcc 
#make -f win64/Makefile.gcc
#sudo BINARY_PATH=/usr/bin \
    INCLUDE_PATH=/usr/x86_64-w64-mingw32/include \
    LIBRARY_PATH=/ usr/x86_64-w64-mingw32/lib \
    make -f win64/Makefile.gcc install
#make install
zlib is in /usr/local/x86_64-w64-mingw32/include    and
/usr/local/x86_64-w64-mingw32/lib
 
in directory of openssl:
#./Configure --cross-compile-prefix=x86_64-w64-mingw32- mingw64
#make
#make install
SSl is located in /usr/local/ssl
Finally I created a directory for the libssh-build
/home/affenarsch/Download/build and created a toolchainfile for cmake
/home/affenarsch/Download/file.cmake with following content:
                
set(CMAKE_SYSTEM_NAME Windows)
                set(COMPILER_PREFIX "x86_64-w64-mingw32")
 
set(CMAKE_C_COMPILER /usr/bin/${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/${COMPILER_PREFIX}-g++)
set(CMAKE_RC_COMPILER /usr/bin/${COMPILER_PREFIX}-windres)
 
SET(CMAKE_FIND_ROOT_PATH  /usr/${COMPILER_PREFIX} /usr/local/ssl
/usr/local//${COMPILER_PREFIX})
 
Did some changes to the DefineOptions.cmake file of libssh:
 
option(WITH_GSSAPI "Build with GSSAPI support" ON)
option(WITH_ZLIB "Build with ZLIB support" ON)
option(WITH_SSH1 "Build with SSH1 support" ON)
option(WITH_SFTP "Build with SFTP support" ON)
option(WITH_SERVER "Build with SSH server support" ON)
option(WITH_STATIC_LIB "Build with a static library" ON)
option(WITH_DEBUG_CRYPTO "Build with cryto debug output" OFF)
option(WITH_DEBUG_CALLTRACE "Build with calltrace debug output" ON)
option(WITH_GCRYPT "Compile against libgcrypt" OFF)
option(WITH_PCAP "Compile with Pcap generation support" ON)
option(WITH_INTERNAL_DOC "Compile doxygen internal documentation" OFF)
option(WITH_TESTING "Build with unit tests" OFF)
option(WITH_CLIENT_TESTING "Build with client tests; requires a running
sshd" OFF)
option(WITH_BENCHMARKS "Build benchmarks tools" OFF)
option(WITH_EXAMPLES "Build examples" ON)
option(WITH_NACL "Build with libnacl (curve25519" ON)
if (WITH_ZLIB)
    set(WITH_LIBZ ON)
else (WITH_ZLIB)
    set(WITH_LIBZ OFF)
endif (WITH_ZLIB)
 
if(WITH_BENCHMARKS)
  set(WITH_TESTING ON)
endif(WITH_BENCHMARKS)
 
if (WITH_TESTING)
  set(WITH_STATIC_LIB ON)
endif (WITH_TESTING)
 
if (WITH_NACL)
  set(WITH_NACL ON)
endif (WITH_NACL)
 
then, from /home/affenarsch/Downloads/build :
#cmake /home/affenarsch/Downloads/libssh-0.7.2
-DCMAKE_TOOLCHAIN_FILE=/home/affenarsch/Downloads/file.cmake
#make
#sudo make install
 
libssh is located in /usr/local/local/lib   and    /usr/local/include    (in
directory libssh: /usr/local/include/libssh actually ).
And i did the build once (no "old wood" from builds before).
 
compiler/libtest:
set up sample code in main.c of my home-directory and tried to gcc:
#/usr/bin/x86_64-w64-mingw32-gcc -static main.c -I/usr/local/include
-I/usr/local/x86_64-w64-mingw32/include -I/usr/x86_64-w64-mingw32/include
-L/usr/local/lib -L/usr/local/x86_64-w64-mingw32/lib
-L/usr/x86_64-w64-mingw32/lib -lssh -lssl -lcrypto -lws2_32 -lz
 
It found all libs I try to link, but I got "undefined references"- errors.
nm'ing libssh.a is showing undefined symbols for used functions like
new_ssh()?!
I tried and read so much! Please help. What else do u need for problem
solving? Or: Just some How-to cmdlines do it the right way?- And I diff the
solution to my wrong way, to get the problem/mistake.
 
 
Thank u very much.
 
 
 
| Re: setting up an environment for cross-compiling static libssh-projects | Andreas Schneider <asn@xxxxxxxxxxxxxx> | 

