2016-03-21 7 views
0

Ich habe ein Projekt, das ich mit CMake erstellen und mit MinGW kompilieren möchte. Das Projekt verwendet Zlib. Wenn ich mit CMake bauen bekomme ich keine Fehler, aber dann, wenn ich laufe MinGW Machen Sie es gibt die folgende Ausgabe:MinGW/CMake undefiniert Verweis auf ZLib

C:\Projects\MultiMCBuild>C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe 
. 
. 
. 
[ 50%] Linking CXX shared library ..\libMultiMC_logic.dll 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x1f6c): undefined reference to 'z_inflateEnd' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x29e2): undefined reference to 'z_inflateInit2_' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x2a6d): undefined reference to 'z_get_crc_table' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x2ca7): undefined reference to 'z_inflateEnd' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x2f52): undefined reference to 'z_inflateInit2_' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x2f77): undefined reference to 'z_inflateEnd' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x3239): undefined reference to 'z_inflateInit2_' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x3317): undefined reference to 'z_inflateEnd' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x3626): undefined reference to 'z_crc32' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x371f): undefined reference to 'z_inflate' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x376a): undefined reference to 'z_crc32' 
C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):unzip.c:(.text+0x3a57): undefined reference to 'z_inflateEnd' 
C:/Qt/Tools/mingw492_32/bin/../lib/gcc/i686-w64- mingw32/4.9.2/../../../../i686-w64-mingw32/bin/ld.exe: C:/Projects/MultiMCBuild/External/Install/QuaZIP/lib/libquazip.a(unzip.c.obj):  bad reloc address 0x20 in section `.eh_frame' 
collect2.exe: error: ld returned 1 exit status 
logic\CMakeFiles\MultiMC_logic.dir\build.make:3186: recipe for target 'libMultiMC_logic.dll' failed 
mingw32-make[2]: * * * [libMultiMC_logic.dll] Error 1 
CMakeFiles\Makefile2:1806: recipe for target 'logic/CMakeFiles/MultiMC_logic.dir/all' failed 
mingw32-make[1]: * * * [logic/CMakeFiles/MultiMC_logic.dir/all] Error 2 
makefile:159: recipe for target 'all' failed 
mingw32-make: * * * [all] Error 2 

Wer eine Ahnung hat, was kann ich tun, um dieses Problem beheben? Ich habe gelesen, dass der Code die ZLib-Bibliothek nicht finden kann, wie verknüpfe ich sie?

BEARBEITENhere ist meine CMakeLists.txt. Ich habe das vom Git Projekt bekommen.

+0

Haben Sie auch zlib mit dem gleichen Compiler erstellt? (Wenn nicht, tu das) –

+0

Kannst du bitte ein minimales Beispiel deiner 'CMakeLists.txt' Datei hinzufügen? Es könnte einfach eine fehlende Abhängigkeit sein (wenn ZLib auch mit CMake erstellt wird), könnte es eine fehlende Binärdatei sein (wenn prebuild) oder generell der Verweis auf ZLib in Ihrer CMake-Konfiguration komplett fehlt. Funktioniert es mit einem anderen Compiler? – Florian

+0

Ich habe die ZLib kompilierte DLL heruntergeladen und das Projekt auch von einem Git Repo geklont. Alles deutet darauf hin, dass etwas mit meiner Umgebung nicht in Ordnung ist. – user3099265

Antwort

0

Ich habe gerade versucht, ein kleines Beispiel zu generieren, um Ihre Fehler zu reproduzieren. Ich nahm meine Testdatei auf der Homepage von zlib http://zlib.net/zpipe.c

Meine ersten CMakeLists.txt

cmake_minimum_required(VERSION 3.4) 
project(zlib_test) 
set(ZLIB_TEST_SOURCES zpipe.c) 
add_executable(${PROJECT_NAME} ${ZLIB_TEST_SOURCES}) 

war und ich bekam die gleichen Fehler

[ 50%] Building C object CMakeFiles/zlib_test.dir/zpipe.c.o 
[100%] Linking C executable zlib_test 
CMakeFiles/zlib_test.dir/zpipe.c.o: In function `def': 
zpipe.c:(.text+0x65): undefined reference to `deflateInit_' 
zpipe.c:(.text+0xcd): undefined reference to `deflateEnd' 
zpipe.c:(.text+0x135): undefined reference to `deflate' 
zpipe.c:(.text+0x1cf): undefined reference to `deflateEnd' 
zpipe.c:(.text+0x25d): undefined reference to `deflateEnd' 
CMakeFiles/zlib_test.dir/zpipe.c.o: In function `inf': 
zpipe.c:(.text+0x2eb): undefined reference to `inflateInit_' 
zpipe.c:(.text+0x353): undefined reference to `inflateEnd' 
zpipe.c:(.text+0x3a4): undefined reference to `inflate' 
zpipe.c:(.text+0x404): undefined reference to `inflateEnd' 
zpipe.c:(.text+0x476): undefined reference to `inflateEnd' 
zpipe.c:(.text+0x4a6): undefined reference to `inflateEnd' 
collect2: error: ld returned 1 exit status 
make[2]: *** [zlib_test] Error 1 
make[1]: *** [CMakeFiles/zlib_test.dir/all] Error 2 
make: *** [all] Error 2 

Nach CMakeLists.txt diese Form zu ändern

cmake_minimum_required(VERSION 3.4) 
project(zlib_test) 

find_package(ZLIB REQUIRED) 
if (ZLIB_FOUND) 
    include_directories(${ZLIB_INCLUDE_DIRS}) 
endif() 

set(ZLIB_TEST_SOURCES zpipe.c) 

add_executable(${PROJECT_NAME} ${ZLIB_TEST_SOURCES}) 
target_link_libraries(${PROJECT_NAME} ${ZLIB_LIBRARIES}) 

Ich könnte kompilieren e das Programm.

Ihr Problem ist also: Wo ist ZLIB in Ihrem CMakeLists.txt hinzugefügt? Zumindest benötigen Sie die Zeile find_package(ZLIB REQUIRED).