Qt Creator 2.0.94 et Fedora
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:
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:
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.