2016-06-30 17 views
0

Ich versuche, Live555-Bibliotheken unter Windows mit MinGW zu kompilieren. Der Beamte legt nicht wirklich fest, wie man es macht (nur mit VC und Borland). I edited win32config so heißt es:Kompilieren und verwenden Live555-Bibliotheken - Windows und MinGW (nicht aufgelöste Referenzen)

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) $< 

Dann laufe ich genWindowsMakefiles.cmd Datei, die sich in Unterordnern * .mak Dateien erstellt. Ich habe sie in Makefile umbenannt und einen Lauf in jedem der Unterordner gemacht: UsageEnvironment, groupsock, liveMedia, BasicUsageEnvironment. Dies gab mir * LIB-Dateien, aber wenn ich sie in meinem Projekt verknüpfen, ich viele ungelöste Referenzen erhalten wie folgt:

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 

und Fehler:

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]' 

Jede Idee, was ich m falsch machen? Wie kann ich es reparieren?

+0

Haben jemand Live55 mit Mingw unter Windows kompiliert? Was ist ein richtiger Weg? – Pawel

Antwort

0

ich das Problem zu lösen geführt. Die nicht definierten Referenzen stammen aus der Winsock-Bibliothek. Es wurde beim Kompilieren von live555 verlinkt, aber ich habe in meinem Projekt nicht mit live555 verlinkt (ich wusste nicht, dass ich das tun sollte). Das Hinzufügen von -lws2_32 zu Verknüpfungsoptionen hat das Problem gelöst.

beim Kompilieren mit vielen Funktionen stieß ich auf auf undefinierten Referenzen auch mit „_unwind_“ Stichwort Hantieren - der Grund war, Inkompatibilität zwischen Compiler-Versionen in Gebäuden LIVE555 und das Projekt verwendet.

0

MinGW ist näher an Unix-Stil Make-Datei, statt VC Make-Datei zu versuchen, sich anzupassen, sollten Sie versuchen:

./genMakefiles mingw 
make 
+0

Bei der Verwendung bekomme ich: ld.exe: Relocatable Verknüpfung mit Umlagerungen von Format pe-x86-64 (rtcp_from_spec.o) zu pe-i386 formatieren (libliveMedia.a) wird nicht unterstützt – Pawel

+0

Es bedeutet, dass Sie 64-Bit-Compilierung und 32-Bit mischen Verknüpfen Sie, überprüfen Sie Ihre CC, CXX und LD Variablen. – mpromonet

+0

Für jetzt versuche ich von mingw32 zu kompilieren. Variablen sind: CC = cc, CXX = g ++, LD = ld, der Rest von Makefile ist: 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-veraltet 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