2013-05-21 58 views
1

有沒有辦法在我的c測試程序中包含http://freeimage.sourceforge.net/index.html而無需首先安裝庫?它無法編譯,因爲一些memset ..FreeImage包含在c中

這是我的C代碼。有什麼辦法可以使它工作嗎?請嘗試編譯它並告訴我如果它可以工作,那麼該怎麼做?

#define NAZIV_DATOTEKE 50 
#include <stdio.h> 
#include "FreeImage.h" 


void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message); 
FIBITMAP* GenericLoader(const char* lpszPathName, int flag); 

int main(){ 
    FreeImage_Initialise(); 
    FIBITMAP *dib, *ptr; 
    char ulaz_slika[NAZIV_DATOTEKE] = "bmp_24.bmp"; 
    char izlaz_slika[NAZIV_DATOTEKE] = "free.bmp"; //podrazumevana vrednost 

    dib = GenericLoader(ulaz_slika, 0); 
    //slika = FreeImage_Load(FIF_BMP, "bmp_24.bmp", BMP_DEFAULT); 
    FreeImage_SetOutputMessage(FreeImageErrorHandler); 
    if (dib) { 
     printf("Ucitan \"%s\".\n", ulaz_slika); 
    } 

    FREE_IMAGE_FORMAT fif = FreeImage_GetFileType(ulaz_slika, 0); 
    if ((fif != FIF_BMP) && (fif != FIF_ICO) && (fif != FIF_JPEG) && (fif != FIF_PNG) && (fif != FIF_TIFF)){ 
     printf("Format slike nije podrzan.\n"); 
     return 1; 
    } 


    ptr = FreeImage_ConvertTo24Bits(dib); 
    FreeImage_SetOutputMessage(FreeImageErrorHandler); 
    FreeImage_Unload(dib); 
    FreeImage_SetOutputMessage(FreeImageErrorHandler); 
    dib = ptr; 
    if (dib) { 
     printf("Konvertovan u RGB.\n"); 
    } 


    const char *slika = (const char*)FreeImage_GetBits(dib); 


    if (FreeImage_Save(fif, dib, izlaz_slika, BMP_DEFAULT)) { 
     printf("Snimljen \"%s\".\n", izlaz_slika); 
    } 


    if (dib) { 
     FreeImage_Unload(dib); 
    } 
    FreeImage_DeInitialise(); 
    return 0; 
} 

void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message){ 
    printf("\n*** "); 
    if(fif != FIF_UNKNOWN) { 
     if (FreeImage_GetFormatFromFIF(fif)) 
      printf("%s Format\n", FreeImage_GetFormatFromFIF(fif)); 
    } 
    printf(message); 
    printf(" ***\n"); 
} 

FIBITMAP* GenericLoader(const char* lpszPathName, int flag) { 
    FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; 
    // check the file signature and deduce its format 
    // (the second argument is currently not used by FreeImage) 
    fif = FreeImage_GetFileType(lpszPathName, 0); 
    if(fif == FIF_UNKNOWN) { 
     // no signature ? 
     // try to guess the file format from the file extension 
    fif = FreeImage_GetFIFFromFilename(lpszPathName); 
    } 
    // check that the plugin has reading capabilities ... 
    if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { 
     // ok, let's load the file 
     FIBITMAP *dib = FreeImage_Load(fif, lpszPathName, flag); 
     // unless a bad file format, we are done ! 
     return dib; 
    } 
    return NULL; 
} 

回答

1

不,你不能。爲了編譯源代碼,鏈接器需要庫。

+1

或者更具體地說,無論是編譯器需要頭文件來編譯你的C代碼,或者鏈接器需要庫來鏈接你的目標文件 – xaxxon

+0

無論如何感謝。至少現在我知道哪個庫不用... – magnumns

+0

你錯了。動態鏈接庫將允許做他想要的。 –