vs2013编译apr时遇到的疑难杂症
生活随笔
收集整理的這篇文章主要介紹了
vs2013编译apr时遇到的疑难杂症
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下內容轉自:http://nohup.yne.fr/2014/07/apache-22-msvc-2013.html
Apache 2.2 & MSVC 2013
La branche 2.2.x du serveur http d’Apache a une importance particulière carmod_perl? y fonctionne correctement ce qui n’est pas le cas avec la nouvelle branche 2.4. Apache 2.2, bien qu'encore supporté, commence à dater. La version 2.2.0 date de décembre 2005. Depuis, les compilateurs ont évolués et des problèmes commencent à apparaitre. C’est le cas avec Visual Studio 2013 et sa ? Plateform Toolset v120 ?.Voici ce qu’il faut corriger pour pouvoir compiler le serveur http 2.2 d'Apache avec MSVC 2013.
1) Télécharger
?2) Environnement
Le PATH doit inclure un chemin sur awk.exe et sur les binaires de MSVC?C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin.
Ouvrir une console (cmd) dans le répertoire contenant les sources d'Apache.
Exécuter le script "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
3) Compiler
Normalement il suffirait de taper la commande??? nmake -f Makefile.win
mais ?a ne marche pas car on obtient 5 erreurs du type:
pr_atomic.obj :?error LNK2019: unresolved external symbol __InterlockedXxxx referenced in function _apr_atomic_inc32@xx
Les 5 erreurs sont:
Creating library .\Release\libapr-1.lib and object .\Release\libapr-1.exp
apr_atomic.obj : error LNK2019: unresolved external symbol __InterlockedIncrement referenced in function _apr_atomic_inc32@4
apr_atomic.obj : error LNK2019: unresolved external symbol __InterlockedExchangeAdd referenced in function _apr_atomic_add32@8
apr_atomic.obj : error LNK2019: unresolved external symbol __InterlockedExchange referenced in function _apr_atomic_set32@8
apr_atomic.obj : error LNK2019: unresolved external symbol __InterlockedDecrement referenced in function _apr_atomic_dec32@4
apr_atomic.obj : error LNK2019: unresolved external symbol __InterlockedCompareExchange referenced in function _apr_atomic_cas32@12
.\Release\libapr-1.dll :?fatal error LNK1120: 5 unresolved externals
NB;?Ce problème n’apparait pas si on génère une version 64 bits d’apache.
4) Error LNK2019
Pour corriger cette erreur? il faut éditer le fichiersrclib\apr\atomic\win32\apr_atomic.c?et mettre en commentaire (ou supprimer)?tous?les casts tel que celui-ci (il y en a 9 en tout) :?#else
return (?/*(apr_atomic_win32_ptr_ptr_ptr_fn)*/?InterlockedCompareExchange)(mem, with, cmp);
#endif
(apr_atomic_win32_xxxx) est mis en commentaire 10 fois.
NB:?Ceci supprimera les erreurs mais en échange on aura 7 warnings?C4047 et 5 warnings?C4024?à la compilation.
5) Error LNK2011
A ce stade, si on tentait à nouveau de compiler on obtiendrait cette nouvelle erreur :adobe-stdenc.obj :?error LNK2011: precompiled object not linked in; image may not run
..\Release\iconv\adobe-stdenc.so : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\link.EXE"' : return code '0x460'
Stop.
Cette erreur, de manière générale, vient du fait que
1.??? un fichier xxxx.c est compilé pour créer un fichier xxxx.pch,?
2.??? ce fichier xxxx.pch est utilisé pour compiler d’autres fichiers .c
3.??? au moment de l’édition de lien xxxx.obj n’est pas utilisé
(Détail ici:?http://msdn.microsoft.com/en-us/library/3ay26wa2.aspx)
La solution générique a cette erreur consiste donc à ajouter xxxx.obj à la liste des fichiers obj au moment de l’édition des liens.
Dans le cas de Apache 2.2.x, éditer le fichier srclib\apr-iconv\build\modules.mk.win, localiser cette règle et y ajouter la partie surlignée en vert.
.c{$(OUTPUT_DIR)}.so:
??? $(SILENT)cl $(ALL_CFLAGS) /Fo$*.obj /Yuiconv.h /c $<
??? $(SILENT)link $(ALL_LDFLAGS)?$(MODRES).obj?$*.obj $(API_LIBS) /out:$@ \
??? ??? /base:@"..\build\BaseAddr.ref",$(@F)
Pour comprendre il faut bien voir que $(ALL_CFLAGS) utilisé à chaque compilation contient ... /Fd$(MODRES).pdb /Fp$(MODRES).pch ...
6) Compiler (pour de bon)
Une fois ces erreurs corrigées on peut lancer depuis la racine des sources? nmake -f Makefile.win???(pour seulement compiler)
ou
? nmake –f Makefile.win installr????(pour compiler et installer dans C:\Apache22)
Le répertoire d’installation peut être spécifié avec le paramètre INSTDIR
? nmake -f Makefile.win INSTDIR="D:\my\Path\Apache" installr
Regardez les commentaires au début du fichier Makefile.win pour découvrir les différents paramètres pouvant être utilisés? pour customiser la compilation et/ou l’installation.
7) Démarrer le serveur HTTPd
Aller dans le répertoire bin de apache (par défaut C:\Apache22\bin) et exécuterhttpd.exePublié il y a?28th July 2014?par?jef Libellés:?apache?mod_perl?MSVC2013?Windows
總結
以上是生活随笔為你收集整理的vs2013编译apr时遇到的疑难杂症的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从VS2008+QT4到VS2015+Q
- 下一篇: NTP-Windows 2008和win