[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

setting up an environment for cross-compiling static libssh-projects


 

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.

 

 

 


Follow-Ups:
Re: setting up an environment for cross-compiling static libssh-projectsAndreas Schneider <asn@xxxxxxxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org