2013-08-11 1 views
0

Как новый, как я есть на C++, я не совсем понимаю эту связь и прочее. И я думаю, что это примерно extern "C".Неразрешенные внешние и внешние «С»?

extern "C" 
{ 
int loadbmp(char *filename, unsigned char **buf, 
      int *w, int *h, int pf, int bottomup); 
const char *bmpgeterr(void); 
} 

unsigned char *srcBuf=NULL, **jpegBuf=NULL; 
unsigned long jpegsize=0; 
int width, height; 
char *filename={"Screenshot158139.bmp"}; 
tjhandle handle=NULL; 

void main(){ 
    if(loadbmp(filename, &srcBuf, &width, &height,TJPF_RGB, 0)==-1){ 
     //printf("Could not load bitmap: %s\n", bmpgeterr()); 
     exit(1); 
    } 
    if((handle=tjInitCompress())==NULL) { 
     printf("Could not initialize compressor: %s\n", tjGetErrorStr()); 
     free(srcBuf); 
     exit(1); 
    } 
    if((tjCompress2(handle, srcBuf, width, 0, height, TJPF_RGB, 
        jpegBuf, &jpegsize, TJSAMP_444,10, 0))==-1) { 
     printf("Could not compress: %s\n", tjGetErrorStr()); 
     free(&srcBuf); 
     tjDestroy(handle); 
     exit(1); 
    }  
} 

Проблема, которую я получаю от этого в том, что мне нужно решить extern "C" код, я думаю:

error LNK2001: unresolved external symbol loadbmp 

К сожалению, я не знаю, как сделать это, и как это ошибка чрезвычайно общие в мире C++, найти ответ для этого не так просто, как они могут отличаться.

Надеюсь, это довольно легко решить, так как я предполагаю, что я должен определить его или что-то в этом качестве, это внешний код.

+0

раздел номер 7 от стандарта C++, если я правильно запоминание. – user2485710

+1

Единственный переносимый тип возврата 'main()' is 'int'. –

+0

Только общий совет: Литеральные строки * constant *, поэтому вы должны либо объявлять переменные, указывающие на литеральную строку, либо на 'const char * filename =" ... ";', либо как на массив, как в 'char filename [] = "..."; '. –

ответ

2

Кажется, вы заявили loadbmp(), но вы не определили его. Где определена функция? Если он должен появиться из библиотеки, не объявите эту функцию самостоятельно, а включите соответствующий заголовок. Документация функции должна сообщить вам, какой из них является соответствующим заголовком, и следует указать, какие дополнительные библиотеки вам могут понадобиться включить.

Если loadbmp() не является функцией, которую вы хотите взять из библиотеки, ее необходимо определить (реализовать).

+0

Я из библиотеки или заголовка (Turbojpeg), к сожалению, я не понимаю, как ее импортировать. Я добавил все библиотеки, но эта конкретная вещь (loadbmp) не существует, но я могу видеть ее в исходных файлах, поэтому я попытался добавить ее сам. – Zerowalker

+0

Ну, это еще ответ на вопрос, остальное зависит от меня, чтобы найти этот материал.Спасибо – Zerowalker

+0

Коротко оглядываясь на это, кажется, что есть библиотека с открытым исходным кодом, называемая ['libjpeg-turbo'] (http://sourceforge.net/projects/libjpeg-turbo/), предоставляющая подпись, подобную той, которую вы объявили. Вы установили эту библиотеку и соответствующим образом включили ее в свою сборку? –

1

Вам не хватает ссылки на ваш файл .lib. Часто это быстрый и простой способ, чтобы добавить эту строку в верхней части файла

#pragma comment(lib,"put_your_lib_filename_here.lib")