2016-03-21 31 views
0

CMake ile oluşturmak ve MinGW ile derlemek istediğim bir projem var. Proje Zlib kullanıyor. Ben CMake ile inşa zaman hiç hata olsun ama MinGW olun çalıştırdığınızda o zaman şu çıktıyı verir:MinGW/CMake Tanımsız Referans 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 

Herkes Bunu düzeltmek için ne yapabilirim bir ipucu? Kodun ZLib kitaplığını bulamadığını okudum, nasıl bağlarım?

EDIThere benim CMakeLists.txt'imdir. Bunu Git projesinden aldım.

+0

Aynı derleyiciyle de zlib oluşturdunuz mu? (Değilse, bunu yapın) –

+0

Lütfen 'CMakeLists.txt' dosyanızın en az bir örneğini ekleyebilir misiniz? Basit bir eksik bağımlılık olabilir (eğer ZLib ayrıca CMake ile kurulursa), eksik bir ikili olabilir (prebuild ise) veya genel olarak CML konfigürasyonunuzda ZLib'e yapılan referans tamamen eksiktir. Başka bir derleyici ile çalışır mı? – Florian

+0

ZLib derlenmiş DLL dosyasını indirdim ve ayrıca projeyi bir Git repo'undan klonladım. Her şey çevremde bir şeylerin yanlış olduğuna işaret ediyor – user3099265

cevap

0

Hatalarınızı yeniden oluşturmak için küçük bir örnek oluşturmaya çalıştım. Ben

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

oldu http://zlib.net/zpipe.c

Benim ilk CMakeLists.txt zlib ana sayfasından benim test dosyasını aldı Ve bu formda

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}) 
için CMakeLists.txt değiştirdikten sonra aynı hataları

[ 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 

var

Derdim yapabilirim e programı.

Yani sorun şu ki: ZLIB, CMakeLists.txt numaralı telefona nereye eklendi? En azından, find_package(ZLIB REQUIRED) numaralı satıra ihtiyacınız var.