2017-04-21 5 views
1

Je dowloaded et décompressé leptonica.zip, puis suivi les étapes (pour exécuter Cmake avec succès):symbole externe non résolu sous Windows 7, _png_init_io référencé dans la fonction _pixReadStreamPng

cd leptonica 
mkdir build 
cd build 
set PATH=%PATH%;C:\OCR\additionalLibs\zlib-1.2.8\build\Debug;C:\OCR\additionalLibs\zlib-1.2.8\build;C:\OCR\additionalLibs\zlib-1.2.8 
set PATH=%PATH%;C:\OCR\additionalLibs\lpng143;C:\OCR\additionalLibs\lpng143\build\Debug;C:\OCR\additionalLibs\lpng143\build 
cmake .. 

Après cela, j'obtiens:

-- Building for: Visual Studio 14 2015 
-- The C compiler identification is MSVC 19.0.24213.1 
-- The CXX compiler identification is MSVC 19.0.24213.1 
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 
14.0/VC/bin/cl.exe 
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 
14.0/VC/bin/cl.exe -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studi 
o 14.0/VC/bin/cl.exe 
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studi 
o 14.0/VC/bin/cl.exe -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Detecting CXX compile features 
-- Detecting CXX compile features - done 
-- Could NOT find GIF (missing: GIF_LIBRARY GIF_INCLUDE_DIR) 
-- Could NOT find JPEG (missing: JPEG_LIBRARY) 
-- Found ZLIB: C:/OCR/additionalLibs/zlib-1.2.8/build/Debug/zlibd.lib (found ver 
sion "1.2.8") 
-- Found PNG: C:/OCR/additionalLibs/lpng143/build/Debug/png14d.lib (found versio 
n "1.4.3") 
-- Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR) 
-- Found PkgConfig: C:/Program Files/CMake/bin/pkg-config.exe (found version "0. 
26") 
-- Checking for module 'libwebp' 
-- No package 'libwebp' found 
-- Checking for module 'libopenjp2' 
-- No package 'libopenjp2' found 
-- Looking for include file dlfcn.h 
-- Looking for include file dlfcn.h - not found 
-- Looking for include file inttypes.h 
-- Looking for include file inttypes.h - found 
-- Looking for include file memory.h 
-- Looking for include file memory.h - found 
-- Looking for include file stdint.h 
-- Looking for include file stdint.h - found 
-- Looking for include file stdlib.h 
-- Looking for include file stdlib.h - found 
-- Looking for include file strings.h 
-- Looking for include file strings.h - not found 
-- Looking for include file string.h 
-- Looking for include file string.h - found 
-- Looking for include file sys/stat.h 
-- Looking for include file sys/stat.h - found 
-- Looking for include file sys/types.h 
-- Looking for include file sys/types.h - found 
-- Looking for include file unistd.h 
-- Looking for include file unistd.h - not found 
-- Looking for include file openjpeg-2.0/openjpeg.h 
-- Looking for include file openjpeg-2.0/openjpeg.h - not found 
-- Looking for include file openjpeg-2.1/openjpeg.h 
-- Looking for include file openjpeg-2.1/openjpeg.h - not found 
-- Looking for include file openjpeg-2.2/openjpeg.h 
-- Looking for include file openjpeg-2.2/openjpeg.h - not found 
-- Looking for fmemopen 
-- Looking for fmemopen - not found 
-- Check if the system is big endian 
-- Searching 16 bit integer 
-- Looking for stddef.h 
-- Looking for stddef.h - found 
-- Check size of unsigned short 
-- Check size of unsigned short - done 
-- Using unsigned short 
-- Check if the system is big endian - little endian 
-- Configuring done 
-- Generating done 
-- Build files have been written to: C:/OCR/leptonica-master/build 

libjpeg, libtiff et libgif ne sont délibérément pas pris en compte car je ne m'intéresse qu'à la gestion des fichiers png. La commande cmake génère un fichier de solution leptonica.sln. Je compile ensuite le fichier de solution sur Visual Studio (afin de trouver le fichier d'en-têtes zlib.h ; zconf.h; png.h; pngconfig.h J'ai modifié les répertoires INCLUDE en ajoutant: C: \ OCR \ additionalLibs \ zlib-1.2.8; C: \ OCR \ additionalLibs \ lpng143) .

Mais la solution ne compile pas en raison des erreurs:

LNK2019 unresolved external symbol _png_init_io referenced in function _pixReadStreamPng leptonica 
LNK2019 unresolved external symbol _png_init_io referenced in function _pixReadStreamPng leptonica 

L'erreur provient du fichier pngio.h, qui pixReadStreamPng appelle la fonction png_init_io, définie dans png.h. On dirait que l'implémentation de la fonction n'est pas trouvée, existe-t-il d'autres bibliothèques qui devraient être implémentées? Où est png_init_io mis en œuvre?

+1

Il est implémenté dans png.c. Mais il est surveillé par #ifdef PNG_STDIO_SUPPORTED, que vous n'avez peut-être pas défini. Voir les commentaires dans png.c –

+0

@ GlennRanders-Pehrson s'il vous plaît écrivez-le comme une réponse, il a résolu le problème pour moi! =) merci beaucoup – Robson

Répondre

1

Il est implémenté dans le fichier png.c de libpng, mais il est protégé par #ifdef PNG_STDIO_SUPPORTED, que vous n'avez peut-être pas défini. Voir les commentaires dans png.c:

# ifdef PNG_STDIO_SUPPORTED 
/* Initialize the default input/output functions for the PNG file. If you 
* use your own read or write routines, you can call either png_set_read_fn() 
* or png_set_write_fn() instead of png_init_io(). If you have defined 
* PNG_NO_STDIO or otherwise disabled PNG_STDIO_SUPPORTED, you must use a 
* function of your own because "FILE *" isn't necessarily available. 
*/ 
void PNGAPI 
png_init_io(png_structrp png_ptr, png_FILE_p fp) 
{ 
    png_debug(1, "in png_init_io"); 

    if (png_ptr == NULL) 
     return; 

    png_ptr->io_ptr = (png_voidp)fp; 
} 
# endif