2016-06-30 4 views
0

J'essaie de compiler les bibliothèques Live555 sous Windows en utilisant MinGW. L'officiel ne spécifie pas vraiment comment le faire (seulement avec VC et Borland). J'ai effectué win32config il dit:Compilez et utilisez les bibliothèques Live555 - Windows et MinGW (références non résolues)

NODEBUG=1 
TARGETOS = WINNT 
UI_OPTS =  $(guilflags) $(guilibsdll) 
CONSOLE_UI_OPTS =  $(conlflags) $(conlibsdll) 
CPU=i386 

TOOLS32 =  C:\Tools\mingw491_32\bin 
COMPILE_OPTS =  $(INCLUDES) $(cdebug) $(cflags) $(cvarsdll) -I. -I"$(TOOLS32)\include" 
C =   c 
C_COMPILER =  "$(TOOLS32)\gcc.exe" 
C_FLAGS =  $(COMPILE_OPTS) 
CPP =   cpp 
CPLUSPLUS_COMPILER = "$(TOOLS32)\g++.exe" 
CPLUSPLUS_FLAGS = $(COMPILE_OPTS) 
OBJ =   o 
LINK =   $(CXX) -o 
LIBRARY_LINK =  $(LD) -o 
LIBRARY_LINK_OPTS = $(LINK_OPTS) -r -Bstatic 
LINK_OPTS =  -L. 
CONSOLE_LINK_OPTS = $(LINK_OPTS_0) $(CONSOLE_UI_OPTS) 
SERVICE_LINK_OPTS =  kernel32.lib advapi32.lib shell32.lib -subsystem:console,$(APPVER) 
LIB_SUFFIX =  lib 
LIBS_FOR_CONSOLE_APPLICATION = 
LIBS_FOR_GUI_APPLICATION = 
MULTIMEDIA_LIBS = winmm.lib 
EXE =   .exe 
PLATFORM = Windows 

rc32 = "$(TOOLS32)\bin\rc" 
.rc.res: 
    $(rc32) $< 

J'exécuter le fichier genWindowsMakefiles.cmd, qui a créé les fichiers * .mak dans les sous-dossiers. Je les ai renommés en Makefile et en un make make dans chacun des sous-dossiers: UsageEnvironment, groupsock, liveMedia, BasicUsageEnvironment. Cela m'a donné * .lib, mais quand je les ai lien dans mon projet, je reçois beaucoup de références non résolues comme ceci:

c:/Tools/live555/libBasicUsageEnvironment.lib:BasicUsageEnvironment.cpp:(.text+0x502): undefined reference to `[email protected]' 
c:/Tools/live555/libBasicUsageEnvironment.lib:BasicTaskScheduler.cpp:(.text+0xf89): undefined reference to `[email protected]' 
c:/Tools/live555/libBasicUsageEnvironment.lib:BasicTaskScheduler.cpp:(.text+0x11ca): undefined reference to `[email protected]' 
c:/Tools/live555/libBasicUsageEnvironment.lib:BasicTaskScheduler.cpp:(.text+0x11e1): undefined reference to `[email protected]' 
c:/Tools/live555/libBasicUsageEnvironment.lib:BasicTaskScheduler.cpp:(.text+0x147a): more undefined references to `[email protected]' follow 

et erreurs:

c:/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/bin/ld.exe: c:/Tools/live555/libgroupsock.lib: warning: COMDAT symbol '.eh_frame$_ZNK10NetAddress4dataEv' does not match section name '.eh_frame' 
c:/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/bin/ld.exe: c:/Tools/live555/libliveMedia.lib: warning: COMDAT symbol '.eh_frame$_ZNK9HashTable7IsEmptyEv' does not match section name '.eh_frame' 
c:/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/bin/ld.exe: c:/Tools/live555/libBasicUsageEnvironment.lib: bad reloc address 0x1c in section `.text$_ZN13DelayIntervalC1Ell[__ZN13DelayIntervalC1Ell]' 

Toute idée de ce que je Je fais mal? Comment puis-je le réparer?

+0

Est-ce que quelqu'un a compilé live555 avec MINGW sur Windows? Quelle est la bonne façon de le faire? – Pawel

Répondre

0

J'ai réussi à résoudre le problème. Les références non définies proviennent de la bibliothèque de winsock. Il était lié lors de la compilation de live555, mais je ne faisais pas de lien dans mon projet en utilisant live555 (je ne savais pas que je devrais le faire). L'ajout de -lws2_32 aux options de liaison a résolu le problème.

Quand jongler avec la compilation aussi je suis tombé à des références non définies à de nombreuses fonctions avec mot-clé « _unwind_ » - la raison est l'incompatibilité entre les versions du compilateur utilisées dans la construction LIVE555 et le projet.

0

MinGW est plus proche de makefile de style Unix, au lieu d'essayer d'adapter VC makefile, vous devriez essayer:

./genMakefiles mingw 
make 
+0

Lors de l'utilisation de ce que je reçois: ld.exe: Liaison relocatable avec des relocalisations de format pe-x86-64 (rtcp_from_spec.o) pour le format pe-i386 (libliveMedia.a) n'est pas supporté – Pawel

+0

Cela signifie que vous mélangez 64bits compilation et 32bits liaison, vérifiez vos variables CC, CXX et LD. – mpromonet

+0

Pour l'instant j'essaie de compiler à partir de mingw32. Les variables sont: CC = cc, CXX = g ++, LD = ld, le reste de Makefile est: COMPILE_OPTS = $ (INCLUDES) -I. -O -DSOCKLEN_T = int -DLOCALE_NOT_USED C_FLAGS = $ (COMPILE_OPTS) -DUSE_OUR_BZERO = 1 -D__MINGW32__ CPLUSPLUS_FLAGS = $ (COMPILE_OPTS) -D__MINGW32__ -Wall -Wno-dépréciée OBJ = o LINK = $ (CXX) -o LINK_OPTS = -L. CONSOLE_LINK_OPTS = $ (LINK_OPTS) LIBRARY_LINK = $ (LD) -o LIBRARY_LINK_OPTS = $ (LINK_OPTS) -r -Bdynamic – Pawel