Salut les amis,
j'ai un souci au niveau de la librairie linpng, je m'explique :
j'ai créé un projet via CMakeLists.txt dans le but d'utiliser la librairie libpng.
Le souci intervient au niveau du linkage, apparement il ne trouve pas la fonction appellée.
j'ai cherché des jours sur internet mais il n'y a pas de réponses précises.
voici le CMakeLists :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
PROJECT(LIB_PNG)
#enable language C++
ENABLE_LANGUAGE(CXX)
 
IF(UNIX)
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build)
SET(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build/lib)
ENDIF(UNIX)
 
# We can't build both concurrently because a shared png on MSVC causes link
# errors against a static zlib
if(BUILD_SHARED_LIBS)
    set(PNG_SHARED ON)
    set(PNG_STATIC OFF)
else()
    set(PNG_SHARED OFF)
    set(PNG_STATIC ON)
endif()
 
 
#SET(SRC "${CMAKE_SOURCE_DIR}/src")
SET(appli_SOURCES main.cpp)
 
# Allow users to rename the library that gets built
if(CMAKEPORTS_NAME_PREFIX AND (TARGET png12 OR TARGET png12_static))
    if(PNG_SHARED)
        set_target_properties(png12 PROPERTIES OUTPUT_NAME "${CMAKEPORTS_NAME_PREFIX}png12")
    endif()
    if(PNG_STATIC)
        set_target_properties(png12_static PROPERTIES OUTPUT_NAME "${CMAKEPORTS_NAME_PREFIX}png12")
    endif()
endif()
 
# Compatibility settings for interoperability with FindPNG.cmake
if(ZLIB_FOUND)
    set(PNG_PNG_INCLUDE_DIR
        ${CMAKE_CURRENT_SOURCE_DIR}/${png_directory} PARENT_SCOPE)
    set(PNG_LIBRARY   png12                          PARENT_SCOPE)
    set(PNG_INCLUDE_DIR
        ${CMAKE_CURRENT_SOURCE_DIR}/${png_directory}
        ${ZLIB_INCLUDE_DIR}                          PARENT_SCOPE)
    set(PNG_LIBRARIES png12 ${ZLIB_LIBRARY}          PARENT_SCOPE)
    if(CYGWIN AND NOT BUILD_SHARED_LIBS)
        set(PNG_DEFINITIONS -DPNG_STATIC             PARENT_SCOPE)
    endif()
    set(PNG_FOUND true                               PARENT_SCOPE)
endif()
# Hide these cache variables so as not to confuse CMakePorts users
if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}
        VERSION_GREATER 2.6.2)
    unset(PNG_STATIC CACHE)
    unset(PNG_SHARED CACHE)
endif()
 
 
FIND_PACKAGE(PNG) # FindPNG.cmake
    IF(PNG_FOUND)
        MESSAGE(STATUS " * libpng found")
    ELSE(PNG_FOUND)
        MESSAGE(WARNING " * libpng not found !")
    ENDIF(PNG_FOUND)
 
SET(CMAKE_BUILD_TYPE debug)
SET(CMAKE_C_FLAGS "-O0")
 
# Déclaration de l'exécutable
add_executable(appli ${appli_SOURCES})
 
## Link libraries
find_package(PNG REQUIRED)
include_directories(${PNG_INCLUDE_DIR})
target_link_libraries(lib_png${PNG_LIBRARY})
et le bout de code utilisant libpng :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <png.h>
#include <pngconf.h>
using namespace std;
 
int main(int argc, char *argv[])
{
    FILE *f;
    png_structp png_write;
 
    cout<<"TEST lib_png"<<endl;
    f = fopen ("toto.png","wb");
    if(!f){
        cout<<"Error openning FILE"<<endl;
    }
 
    png_write = png_create_write_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
    if (!png_write)
        cout<<"ERROR"<<endl;
    return 0;
}
j'espère avoir été précis.
Cordialement.