未解决的外部和外部“C”?

时间:2013-08-11 18:33:18

标签: c++ c extern-c

我和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 ++世界中非常普遍,找到答案并不容易,因为它们可能不同。

希望解决这个问题非常容易,因为我想我必须将其定义为外部代码。

2 个答案:

答案 0 :(得分:2)

您似乎已声明loadbmp(),但尚未对其进行定义。功能在哪里定义?如果它应该来自一个库,不要自己声明这个函数,而是包含相关的标题。函数的文档应该告诉你哪个是相关的标题,它应该提到你可能需要包含哪些额外的库。

如果loadbmp()不是您想从库中获取的函数,则需要定义(实现)它。

答案 1 :(得分:1)

您缺少的是链接到.lib文件。通常,快速简便的方法是将此行添加到文件顶部

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