Cross-compiling-boost für Windows auf Linux
Ich versuche zu erstellen mingw binaries für die boost-auf einem Linux-Rechner. Der mingw-compiler auf meinem system /usr/bin/i586-mingw32msvc-g++ und ich in der Lage gewesen, um eine einfache HelloWorld.exe -Anwendung.
Hier ist eine genaue Liste meiner Aktionen:
$ tar xvf boost_1_46_1.tar.gz
$ cd boost_1_46_1/
$ echo "using gcc : 4.4.4: i586-mingw32msvc-g++ ;" > user-config.jam
$ ./bootstrap.sh
$ ./bjam toolset=gcc target-os=windows
Das Ergebnis ist dieses:
Building the Boost C++ Libraries.
...found 83 targets...
...updating 9 targets...
common.mkdir bin.v2
common.mkdir bin.v2/libs
common.mkdir bin.v2/libs/regex
common.mkdir bin.v2/libs/regex/build
common.mkdir bin.v2/libs/regex/build/gcc-mingw-4.4.4
common.mkdir bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug
common.mkdir bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows
gcc.compile.c++ bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu_test.o
In file included from /usr/include/unicode/pwin32.h:123,
from /usr/include/unicode/umachine.h:47,
from /usr/include/unicode/uversion.h:47,
from libs/regex/build/has_icu_test.cpp:12:
/usr/include/inttypes.h:290: warning: ISO C++ 1998 does not support ‘long long’
/usr/include/inttypes.h:291: warning: ISO C++ 1998 does not support ‘long long’
libs/regex/build/has_icu_test.cpp: In function ‘int main()’:
libs/regex/build/has_icu_test.cpp:24: warning: unused variable ‘c’
gcc.link bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu.exe
/usr/lib/gcc/i586-mingw32msvc/4.4.4/../../../../i586-mingw32msvc/bin/ld: cannot find -licuuc
collect2: ld returned 1 exit status
"i586-mingw32msvc-g++" -L"/usr/bin" -L"/usr/lib" -Wl,-R -Wl,"/usr/bin" -Wl,-R -Wl,"/usr/lib" -Wl,-rpath-link -Wl,"/usr/bin" -Wl,-rpath-link -Wl,"/usr/lib" -o "bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu.exe" -Wl,--start-group "bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu_test.o" -Wl,-Bstatic -Wl,-Bdynamic -licuuc -licui18n -licudata -Wl,--end-group -g
...failed gcc.link bin.v2/libs/regex/build/gcc-mingw-4.4.4/debug/target-os-windows/has_icu.exe...
...failed updating 1 target...
...updated 8 targets...
Performing configuration checks
- has_icu builds : no
warning: Graph library does not contain MPI-based parallel components.
note: to enable them, add "using mpi ;" to your user-config.jam
...found 8 targets...
...updating 6 targets...
common.mkdir bin.v2/libs/math
common.mkdir bin.v2/libs/math/config
common.mkdir bin.v2/libs/math/config/gcc-mingw-4.4.4
common.mkdir bin.v2/libs/math/config/gcc-mingw-4.4.4/debug
common.mkdir bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows
gcc.compile.c++ bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows/has_gcc_visibility.o
cc1plus: warnings being treated as errors
libs/math/config/has_gcc_visibility.cpp: In function ‘int main()’:
libs/math/config/has_gcc_visibility.cpp:13: error: visibility attribute not supported in this configuration; ignored
"i586-mingw32msvc-g++" -ftemplate-depth-128 -O0 -fno-inline -Wall -g -Werror -fvisibility=hidden -DBOOST_ALL_NO_LIB=1 -I"." -c -o "bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows/has_gcc_visibility.o" "libs/math/config/has_gcc_visibility.cpp"
...failed gcc.compile.c++ bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows/has_gcc_visibility.o...
...failed updating 1 target...
...updated 5 targets...
- ../config//has_gcc_visibility builds : no
...found 46 targets...
...updating 1 target...
gcc.compile.c++ bin.v2/libs/math/config/gcc-mingw-4.4.4/debug/target-os-windows/has_long_double_support.o
...updated 1 target...
- ../config//has_long_double_support builds : yes
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.
************************************************************
Trying to build Boost.Thread with pthread support.
If you need pthread you should specify the paths.
You can specify them in site-config.jam, user-config.jam
or in the environment.
For example:
PTW32_INCLUDE=C:\Program Files\ptw32\Pre-built2\include
PTW32_LIB=C:\Program Files\ptw32\Pre-built2\lib
************************************************************
/home/francis/orig/boost_1_46_1/tools/build/v2/build/virtual-target.jam:1079: in virtual-target.register-actual-name from module virtual-target
error: Duplicate name of actual target: <pstage/lib>libboost_date_time.a
error: previous virtual target { common%common.copy-libboost_date_time.a.STATIC_LIB { gcc%gcc.archive-libboost_date_time.a.STATIC_LIB { gcc%gcc.compile.c++-gregorian/greg_month.o.OBJ { gregorian/greg_month.cpp.CPP } } { gcc%gcc.compile.c++-gregorian/greg_weekday.o.OBJ { gregorian/greg_weekday.cpp.CPP } } { gcc%gcc.compile.c++-gregorian/date_generators.o.OBJ { gregorian/date_generators.cpp.CPP } } } }
error: created from ./stage-proper
error: another virtual target { common%common.copy-libboost_date_time.a.STATIC_LIB { gcc%gcc.archive-libboost_date_time.a.STATIC_LIB { gcc%gcc.compile.c++-gregorian/greg_month.o.OBJ { gregorian/greg_month.cpp.CPP } } { gcc%gcc.compile.c++-gregorian/greg_weekday.o.OBJ { gregorian/greg_weekday.cpp.CPP } } { gcc%gcc.compile.c++-gregorian/date_generators.o.OBJ { gregorian/date_generators.cpp.CPP } } } }
error: created from ./stage-proper
error: added properties: <debug-symbols>off <define>NDEBUG <inlining>full <optimization>speed <runtime-debugging>off <variant>release
error: removed properties: <debug-symbols>on <inlining>off <optimization>off <runtime-debugging>on <variant>debug
/home/francis/orig/boost_1_46_1/tools/build/v2/build/virtual-target.jam:490: in actualize-no-scanner from module object(file-target)@3884
/home/francis/orig/boost_1_46_1/tools/build/v2/build/virtual-target.jam:135: in object(file-target)@3884.actualize from module object(file-target)@3884
/home/francis/orig/boost_1_46_1/tools/build/v2/build-system.jam:748: in load from module build-system
/home/francis/orig/boost_1_46_1/tools/build/v2/kernel/modules.jam:283: in import from module modules
/home/francis/orig/boost_1_46_1/tools/build/v2/kernel/bootstrap.jam:142: in boost-build from module
/home/francis/orig/boost_1_46_1/boost-build.jam:17: in module scope from module
Er sagt libicu nicht gefunden auf meinem system, aber laut Synaptic-Paket Verwaltung habe ich die libicu-dev
Paket installiert.
Ich bin mir nicht sicher, wie es richtig zu machen. Kann mir jemand helfen?
Update 1
Folgende @Luke ' s recoommendation ich jetzt gcc-mingw
toolset. So nun meine build-Anweisungen wie folgt Aussehen:
tar xvf boost_1_46_1.tar.gz
cd boost_1_46_1/
echo "using gcc : 4.4.4: i586-mingw32msvc-g++ ;" > user-config.jam
./bootstrap.sh
./bjam toolset=gcc-mingw target-os=windows
Führt zu den folgenden Fehler:
error: toolset gcc initialization:
error: version 'mingw' requested but 'g++-mingw' not found and version '4.4.5' of default 'g++' does not match
error: initialized from
/home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/build/toolset.jam:38: in toolset.using from module toolset
/home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/build-system.jam:481: in process-explicit-toolset-requests from module build-system
/home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/build-system.jam:561: in load from module build-system
/home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/kernel/modules.jam:283: in import from module modules
/home/francis/orig/boost-mingw/boost_1_46_1/tools/build/v2/kernel/bootstrap.jam:142: in boost-build from module
/home/francis/orig/boost-mingw/boost_1_46_1/boost-build.jam:17: in module scope from module
Update 2
Ich habe auch versucht, die Angabe gcc-mingw
im user-config.jam
- Datei. Dann ist mein build-Anweisungen wie folgt Aussehen:
tar xvf boost_1_46_1.tar.gz
cd boost_1_46_1/
echo "using gcc-mingw : 4.4.4: i586-mingw32msvc-g++ ;" > user-config.jam
./bootstrap.sh
./bjam toolset=gcc-mingw target-os=windows
Führt zu:
error: version 'mingw' requested but 'g++-mingw' not found and version '4.4.5' of default 'g++' does not match
Update 3
Angabe g++-mingw
im user-config.jam
Datei:
using g++-mingw : 4.4.4: i586-mingw32msvc-g++ ;
...führt zum gleichen Fehler.
- Ist der Pfad zu i586-mingw32msvc-g++ - setup-richtig? Sie können geben Sie einen vollständig qualifizierten Pfad zu der g++ - binary. Was passiert, wenn Sie geben Sie einfach
i586-mingw32msvc-g++
auf der Konsole aus dem home-Verzeichnis? Sie wahrscheinlich auch nicht brauchen, die version 4.4.4. Ich denke, Sie müssen nur benutzen Sie diese syntax, wenn Sie versuchen, konfigurieren Sie mehrere Versionen. Sie kann verwirrend sein, ist es dort auch. So versuchengcc : : <your g++ binary path> ;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bekam ich ähnliche Fehlermeldungen. Schließlich war ich in der Lage, um es zu kompilieren exakt die folgenden Befehle ein:
Ich glaube, dein problem ist, dass Sie nicht angeben "--user-config=user-config.jam" - parameter. Das nächste problem begegnete ich war, dass es ein name sein, der Konflikt, es sei denn, ich geben Sie entweder debug oder release build (--layout=tagged oder --layout=versioniert funktioniert vielleicht auch).
user-config.jam
- Datei, die jeder darüber gesprochen. Niemand die Mühe gemacht zu erwähnen, dass es die Bedürfnisse--user-config
zu arbeiten.Dies ist die Befehle, die ich verwenden. Ich habe diese getestet für boost und 1.49 1.46.
Beginnen, erstellen Sie links zu den compiler in /usr/i686-w64-mingw32/bin. Sie können dieses Skript ausführen :
Installieren Sie dann bjam. Unter ubuntu /debian im Paket enthalten ist "libboost1.48-dev"
Zu beenden, werden Sie root und führen Sie
Getan !
g++-mingw
.Hatte ich einige Schwierigkeiten mit diesem, aber es scheint zu funktionieren für mich jetzt. Klar, ich bin cross-Compilierung unter Linux für Windows.
in der user-config.jam:
Beachten Sie, dass der zweite Begriff "mingw32" ist eine beliebige "version" - tag. Die toolset-flag kombiniert der compiler den Namen und die version, name w/a Prise. Also, in meinem Fall, gcc-mingw32. Der Dritte Begriff ist das, was wird tatsächlich aufgerufen wird ("i686-w64-mingw32-g++"). Offensichtlich Ihre version von mingw ist der compiler kann einen anderen Namen haben.
Hier ist, wie ich aufgerufen bjam:
Habe ich alle interessanten Flaggen aus Congelli501 Antwort. Aber nicht die Mühe mit dem Verzeichnis von links nähern.
Laut diese es sieht aus wie Sie sollten mit den
toolset=gcc-mingw
. Sie habentoolset=gcc
.Wie Luke bereits erwähnt,
toolset=gcc-mingw
wird sicherlich helfen.Ihre
libicu-dev
ist zu 99% sicher, dass die linux-Bibliothek-Header, die nicht für mingw. Sie müssen entweder selbst erstellen oder bekommen es von irgendwo (könnte Ihre Verteilung, sonst werden Sie brauchen, um zu bauen, es von der Quelle)toolset=gcc-mingw
scheint nicht zu funktionieren. Haben Sie einen Blick auf mein edit.Hatte ich dasselbe problem. Versuchen Sie, nur einen einzigen build-Variante (D. H., fügen Sie "variant=Release link=shared runtime-link=shared")