2012-12-21 4 views
3

J'ai essayé de construire la bibliothèque Boost pour 64 bits natifs en utilisant le compilateur MinGW64, mais j'ai eu quelques échecs. Tous les pointeurs sont appréciés. Merci.Boost de construction avec MinGW64 sans MASM

J'ai obtenu le bjam.exe (b2.exe) compilé en 64 bits (avec avertissement) et je l'ai utilisé pour obtenir le Boost construit. J'ai l'erreur suivante lors de la construction de Boost.Context. (J'ai écrit la commande en lot pour un bâtiment répétable). Quelque chose m'a manqué?

  • Commande: b2.exe install prefix =% ~ dp0 \ bld \ Boost.Build
  • Erreur: 'ml64' est pas reconnu comme une commande interne ou externe, un programme ou un fichier batch.

J'ai lu la documentation et il a dit:

Boost.Context doit être construit pour le compilateur particulier (s) et l'architecture du processeur (s) visé. Boost.Context inclut le code d'assemblage et, par conséquent, nécessite GNU AS pour les systèmes POSIX pris en charge et MASM pour les systèmes Windows.

Alors, est-il possible d'indiquer au bjam d'utiliser le fichier as.exe inclus dans mon installation MinGW? (Comme je l'ai plusieurs MinGW, l'emplacement n'est pas standard C: \ MinGW \ bin)

projet config.jam

import option ; 
using gcc ; 
option.set keep-going : false ; 

Plate-forme

  • Windows 7 x64
  • Boost 1.52.0 (source de sourceforge)
  • MinGW 4.7.2 (ruben vb x64)
  • Installation Pas MSVC (pas de ml64.exe installé/trouvé dans ma machine)
  • Modifier problèmes sont survenus lors de l'installation WDK

Attention lors de la construction bjam, je pense qu'il peut être ignoré

function.c: In function 'check_alignment': 
function.c:222:5: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 

lot complet

SET OPATH=%PATH% 
SET BOOST_VER=boost_1_52_0 
SET "PATH_ZIP=C:\Program Files\7-zip" 
SET "PATH_MINGW=C:\MinGW\rubenvb-4.7.2-64" 
SET "PATH_SRC=%~dp0\%BOOST_VER%" 
SET "PATH_BJAM=%PATH_SRC%\tools\build\v2\engine" 

TITLE Extracting Packages ... 
IF NOT EXIST "%PATH_SRC%.7z" GOTO :err_nozip 
RD /S /Q "%PATH_SRC%" 
"%PATH_ZIP%"\7z x "%PATH_SRC%.7z" 

TITLE Building BJam ... 
PUSHD "%PATH_BJAM%" 
SET "PATH=%PATH_MINGW%\bin" 
SET "BOOST_JAM_TOOLSET_ROOT=%PATH_MINGW%\" 
CALL build.bat mingw --show-locate-target 
SET PATH=%OPATH% 
COPY "bin.ntx86_64\b2.exe" "%PATH_SRC%\" > nul 
COPY "bin.ntx86_64\bjam.exe" "%PATH_SRC%\" > nul 
POPD 

TITLE Installing Boost Build... 
PUSHD "%PATH_SRC%" 
ECHO import option ; > project-config.jam 
ECHO. >> project-config.jam 
ECHO using gcc ; >> project-config.jam 
ECHO. >> project-config.jam 
ECHO option.set keep-going : false ; >> project-config.jam 
ECHO. >> project-config.jam 
b2.exe install --prefix=%~dp0\bld\Boost.Build 
POPD 

SET PATH=%OPATH% 
+0

http://nuwen.net/mingw.html – TemplateRex

Répondre

0

Selon Boost's requirements, vous pouvez trouver MASM64 dans Windows Driver Kit (WDK) de Microsoft. J'ai téléchargé WDK 7 de Microsoft Download Center, et après l'avoir installé, j'ai trouvé ml64.exe dans bin\x86\amd64. Avec cela, j'ai réussi à compiler Boost 1.53.0.

+0

Je télécharge le WDK, mais ayant un problème lors de l'installation de l'outil, il lance juste des erreurs et se termine sans achèvement. Donc je dois m'en tenir à la chaîne d'outils MinGW –

+0

@ YamHon.CHAN Ça s'est vraiment bien passé pour moi. Peut-être que vous pouvez ouvrir une autre question avec les problèmes que vous avez rencontrés. – betabandido

+0

Merci pour la suggestion, je vais ouvrir une nouvelle question pour ce problème, mais actuellement, je dois rester avec la chaîne d'outils MinGW –

0

(Si cela est toujours d'actualité) Cela se produit lorsque vos dossiers de construction contiennent des artefacts msvc. Je suppose que votre projet-config.confiture a d'abord été

import option ; 
using msvc ; 

et que vous aviez construit pour msvc ensuite changé à « gcc » Dans ce cas, vous devez publier le premier suivant

bjam --clean 

qui devrait effacer les artefacts de msvc construire et vous pouvez émettre et les choses devraient être bien

bjam toolset=gcc variant=..... and so on and on 

par la façon dont je vous ai vu écrire que vous aviez Windows 7 x64. votre commande bjam doit avoir un adresse-model = 64 sinon des binaires 32 bits seront produits ...

3

Ceci est un problème connu pour la construction de Boost> ~ 1.51 avec MinGW. Pour le moment, construire Boost avec MinGW est cassé parce que Boost a une dépendance sur MASM (dans votre cas ml64) lors de la construction de Boost :: Context pour Windows, même avec MinGW.

En tant que Bodge vous pouvez obtenir MASM à partir du site Web de Microsoft: http://www.microsoft.com/en-gb/download/details.aspx?id=12654 pour une version 32 bits, ou bien le Windows Driver Kit pour la version 64 bits: http://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx

Vous pouvez utiliser le patch fourni sur la Boost bug tracker ici: https://svn.boost.org/trac/boost/ticket/7262 cependant pour rendre Boost :: Context compiler avec juste MinGW, réactivant ainsi la compilation croisée de Boost. Vous pouvez également lire les réponses de Olli de Boost sur le sujet et sa réponse au sujet. Ne vous attendez pas à ce que quoi que ce soit soit corrigé dans Boost pendant au moins un moment!

+0

J'ai essayé le patch d'abord, n'a pas fonctionné pour moi. Après l'installation du Kit de pilotes Windows et la mise en place de ml64.exe dans mon% PATH%, la construction de Boost :: Context était possible. –

0

Un peu tard peut-être, mais j'ai réussi à compiler boost-modulaire (le dépôt Git, devrait donc être similaire à 1,55 à partir de Juillet 2014) sur Windows 7, en utilisant MinGW et WDK 7.

Les étapes I utilisés étaient

  1. installer MinGW et Msys (bash, etc.) en utilisant MinGW-get-setup (la manière simple), ajouter bin/au chemin
  2. installer le kit de pilotes Windows (pour W7 je WDK 7) - - GRMWDK_EN_7600_1.ISO
    le téléchargement de l'image ISO et l'extraction des fichiers avec WinRAR a fonctionné pour moi
    l'installateur déconseille l'installation du FSN, de sorte que sauter
  3. ajouter les répertoires de ML64.exe et ml.exe au chemin (à la fois nécessaire AFAIK)
    C: \ Windows \ winddk \ 7600.16385.1 \ bin \ x86 \ amd64; C: \ Windows \ winddk \ 7600.16385.1 \ bin \ x86
  4. cmd.exe ouvert en tant qu'administrateur et commencer bash
  5. dans le répertoire parent de boost, exécutez
    clone git --recursive https://github.com/boostorg/boost.git boost > clone.log
  6. quitter bash, goto répertoire boost et exécuter: bootstrap gcc
  7. si cela se termine sans problèmes (si ML64.exe est trouvé), exécutez
    b2 -a -d + 2 -q --build-type = complet --build-dir = build jeu d'outils = gcc link = shared runtime-link = threading partagé = multi

Sans ajouter explicitement les répertoires ML (64) au chemin, j'ai toujours les erreurs sur ML. L'installation de MASM n'est pas la même que l'installation de MSVC.

J'ai essayé d'utiliser d'abord des assembleurs différents mais le boost n'est pas compatible avec leur sortie.

+0

juste pour ajouter: j'ai été en grande partie capable de refaire ces étapes 1y plus tard, redécouvrant que ** 1 ** le répertoire bin de l'étape 1 dans le chemin est pour un compilateur de mingw 64 bits ** 2 ** après en cours d'exécution "bootstrap gcc" vous devez changer 'project-config.jam': au lieu de' using msvc; 'il faut lire' using gcc; '** 3 ** avant d'exécuter la dernière ligne' b2', vous devez exécuter 'b2 headers' pour définir des liens symboliques - sinon certains fichiers ne seront pas trouvés dans la dernière étape –

+0

En fait, il ne compile pas avec ces options à' b2'. Sans options (par exemple, pas de liaison dynamique, pas de multithreading), 'b2' se termine avec succès; avec les options, il quitte avec 'référence non définie à __imp_ make_fcontext' et' référence non définie à __imp_jump_fcontext' - aucune idée de comment résoudre celui-là ... –

2

En publiant cette réponse ici pour le bénéfice de Google, parce que j'ai lutté avec ce problème toute la journée, et finalement trouvé une solution.

Le contexte Boost échoue à lier sous MinGW s'il est construit avec MASM 6, car il produit le symbole EXPORT.

Ceci se manifeste par undefined reference to `make_fcontext' même si la bibliothèque est correctement liée. Objdump sur la bibliothèque résultante donne make_i386_ms_pe_masm.o: File format not recognized

La solution est de vous assurer que vous utilisez MASM 8.

Vous pouvez le télécharger à http://www.microsoft.com/en-us/download/confirmation.aspx?id=12654 - le programme d'installation râler besoin d'avoir installé VC, mais vous pouvez simplement contourner cela en extraire la le contenu du programme d'installation à l'aide d'un outil tel que WinRAR; extraire setup.exe et extraire à nouveau pour obtenir un .cab, et extraire une troisième fois et renommer le fichier binaire résultant en ml.exe. Puis reconstruire Boost avec bjam --toolset=gcc --with-context -a stage.

J'espère que quelqu'un googler les mêmes termes que j'ai été googling toute la journée le trouvera utile.

Questions connexes