{{tag>Brouillon}}
= Notes cross-compilation
Voir :
https://blog.svgames.pl/article/cross-compiling-c-programs-for-ms-windows-using-mingw
apt-get install crossbuild-essential-i386
Ou
cat /etc/apt/sources.list |grep debian |sed -e 's/stretch/jessie/g' |grep -v deb-src > /etc/apt/sources.list.d/jessie.list
dpkg --add-architecture i386
apt-get update
apt-get install mingw32 mingw32-binutils
#apt-get install mingw-w64
''plop.cpp''
#include
int main(int argc, char** argv)
{
std::cout << "Hello" << std::endl;
return 0;
}
i586-mingw32msvc-g++ -o plop.exe plop.cpp
On windows error libstdc++-6.dll missing
Pour le plus avoir l'erreur \\
Nous ne voulons plus de DLL, donc mettons tout en static
i586-mingw32msvc-g++ -o plop.exe plop.cpp
aptitude search '~n curl ~r i386'
apt-get source curl:i386
apt-get source libcurl3:i386 libcurl3-gnutls:i386
cd curl
#apt-get install crossbuild-essential-i386
export ARCH=i386 CROSS_COMPILE=arm-linux
make -f lazy_makefile CC=i686-w64-mingw32-gcc
./configure --host=i686-w64-mingw32 --enable-shared --disable-install-doc
./configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32
./configure --host=x86_64-w64-mingw32 --disable-magic --disable-cuckoo --with-crypto CFLAGS=-I/root/openssl/include LDFLAGS=-L/root/openssl/lib --enable-static
The right way to do this is to add the ''-static'' flag to an ''LDFLAGS'' variable. For all targets: ''AM_LDFLAGS=-static''
export CC=i586-mingw32msvc-cc
./configure --host=i686-w64-mingw32 --enable-static
export CFLAGS='-static'
make V=1 curl_LDFLAGS=-all-static
git clone -b curl-tiny-7.72 https://github.com/curl/curl.git
libtool: error: Could not determine the host path corresponding to
libtool: error: '/home/jibe/code/i386/curl-7.52.1/lib/.libs'
libtool: error: Continuing, but uninstalled executables may not work.
libtool: error: Could not determine the host path corresponding to
libtool: error: '/home/jibe/code/i386/curl-7.52.1/lib/.libs:/usr/local/lib:/usr/local/bin'
libtool: error: Continuing, but uninstalled executables may not work.
make[2]: Leaving directory '/home/jibe/code/i386/curl-7.52.1/src'
make[1]: Leaving directory '/home/jibe/code/i386/curl-7.52.1/src'
Making all in include
make[1]: Entering directory '/home/jibe/code/i386/curl-7.52.1/include'
Making all in curl
make[2]: Entering directory '/home/jibe/code/i386/curl-7.52.1/include/curl'
make all-am
make[3]: Entering directory '/home/jibe/code/i386/curl-7.52.1/include/curl'
make[3]: Leaving directory '/home/jibe/code/i386/curl-7.52.1/include/curl'
make[2]: Leaving directory '/home/jibe/code/i386/curl-7.52.1/include/curl'
make[2]: Entering directory '/home/jibe/code/i386/curl-7.52.1/include'
make[2]: Nothing to be done for 'all-am'.
make[2]: Leaving directory '/home/jibe/code/i386/curl-7.52.1/include'
make[1]: Leaving directory '/home/jibe/code/i386/curl-7.52.1/include'
make[1]: Entering directory '/home/jibe/code/i386/curl-7.52.1'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/home/jibe/code/i386/curl-7.52.1'
$ find . -iname curl.exe
./curl-7.52.1/src/.libs/curl.exe
./curl-7.52.1/src/curl.exe
Le bon est celui qui est dans ''src/.libs/''
export AM_LDFLAGS='-static'
git clone https://github.com/curl/curl.git
cd curl
git tag
git checkout curl-7_9_8
export ROOTDIR="${PWD}"
cd curl
#$ export CROSS_COMPILE="arm-none-linux-gnueabi"
#export CROSS_COMPILE="stable-i686-pc-windows-gnu"
export CROSS_COMPILE="i686-w64-mingw32"
#export CPPFLAGS="-I${ROOTDIR}/openssl/include -I${ROOTDIR}/zlib/include"
export CPPFLAGS="-I${ROOTDIR}/openssl/include/openssl -I${ROOTDIR}/openssl/include/crypto -I${ROOTDIR}/openssl/include/internal"
export LDFLAGS="-L${ROOTDIR}/openssl/libs -L${ROOTDIR}/zlib/libs"
export AR=${CROSS_COMPILE}-ar
export AS=${CROSS_COMPILE}-as
export LD=${CROSS_COMPILE}-ld
export RANLIB=${CROSS_COMPILE}-ranlib
export CC=${CROSS_COMPILE}-gcc
export NM=${CROSS_COMPILE}-nm
export LIBS="-lssl -lcrypto"
./buildconf
./configure --prefix=${ROOTDIR}/build --target=${CROSS_COMPILE} --host=${CROSS_COMPILE} --build=i586-pc-linux-gnu --with-ssl --with-zlib
sudo apt-get build-dep curl
== Pb
=== Err
''m32test.c''
#include
int main()
{
printf("This works\n");
return 0;
}
$ gcc -m32 -o m32test m32test.c
In file included from /usr/include/stdio.h:27:0,
from m32test.c:2:
/usr/include/features.h:364:25: fatal error: sys/cdefs.h: No such file or directory
# include
^
compilation terminated.
# gcc -m32 -o m32test m32test.c
In file included from m32test.c:1:
/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory
#include
^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Solution
apt-get install gcc-multilib
=== Err undefined reference to
Pb linking error
https://stackoverflow.com/questions/50471481/how-to-cross-compile-from-linux-to-32-bit-windows-executable