简体   繁体   English

错误:LNK1120:9个未解决的外部

[英]error: LNK1120: 9 unresolved externals

I'm trying to convert a bmp image to a png one with this code: 我正在尝试使用此代码将bmp图像转换为png图像:

#define WIN32_LEAN_AND_MEAN
#define _CRT_SECURE_NO_DEPRECATE

#include <png.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

void GetDesktopResolution(int& horizontal, int& vertical)
{
    RECT desktop;
    // Get a handle to the desktop window
    const HWND hDesktop = GetDesktopWindow();
    // Get the size of screen to the variable desktop
    GetWindowRect(hDesktop, &desktop);
    // The top left corner will have coordinates (0,0)
    // and the bottom right corner will have coordinates
    // (horizontal, vertical)
    horizontal = desktop.right;
    vertical = desktop.bottom;
}

typedef struct _RGBPixel {
    uint8_t blue;
    uint8_t green;
    uint8_t red;
} RGBPixel;

/* Structure for containing decompressed bitmaps. */
typedef struct _RGBBitmap {
    RGBPixel *pixels;
    size_t width;
    size_t height;
    size_t bytewidth;
    uint8_t bytes_per_pixel;
} RGBBitmap;

/* Returns pixel of bitmap at given point. */
#define RGBPixelAtPoint(image, x, y) \
    *(((image)->pixels) + (((image)->bytewidth * (y)) \
                        + ((x) * (image)->bytes_per_pixel)))

/* Attempts to save PNG to file; returns 0 on success, non-zero on error. */
int save_png_to_file(RGBBitmap *bitmap, const char *path)
{
    FILE *fp = fopen(path, "wb");
    png_structp png_ptr = NULL;
    png_infop info_ptr = NULL;
    size_t x, y;
    png_uint_32 bytes_per_row;
    png_byte **row_pointers = NULL;

    if (fp == NULL) return -1;

    /* Initialize the write struct. */
    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    if (png_ptr == NULL) {
        fclose(fp);
        return -1;
    }

    /* Initialize the info struct. */
    info_ptr = png_create_info_struct(png_ptr);
    if (info_ptr == NULL) {
        png_destroy_write_struct(&png_ptr, NULL);
        fclose(fp);
        return -1;
    }

    /* Set up error handling. */
    if (setjmp(png_jmpbuf(png_ptr))) {
        png_destroy_write_struct(&png_ptr, &info_ptr);
        fclose(fp);
        return -1;
    }

    /* Set image attributes. */
    png_set_IHDR(png_ptr,
                 info_ptr,
                 bitmap->width,
                 bitmap->height,
                 8,
                 PNG_COLOR_TYPE_RGB,
                 PNG_INTERLACE_NONE,
                 PNG_COMPRESSION_TYPE_DEFAULT,
                 PNG_FILTER_TYPE_DEFAULT);

    /* Initialize rows of PNG. */
    bytes_per_row = bitmap->width * bitmap->bytes_per_pixel;
    png_malloc(png_ptr, bitmap->height * sizeof(png_byte *));
    for (y = 0; y < bitmap->height; ++y) {
        uint8_t *row = (uint8_t *)png_malloc(png_ptr, sizeof(uint8_t)* bitmap->bytes_per_pixel);
        row_pointers[y] = (png_byte *)row;
        for (x = 0; x < bitmap->width; ++x) {
            RGBPixel color = RGBPixelAtPoint(bitmap, x, y);
            *row++ = color.red;
            *row++ = color.green;
            *row++ = color.blue;
        }
    }

    /* Actually write the image data. */
    png_init_io(png_ptr, fp);
    png_set_rows(png_ptr, info_ptr, row_pointers);
    png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);

    /* Cleanup. */
    for (y = 0; y < bitmap->height; y++) {
        png_free(png_ptr, row_pointers[y]);
    }
    png_free(png_ptr, row_pointers);

    /* Finish writing. */
    png_destroy_write_struct(&png_ptr, &info_ptr);
    fclose(fp);
    return 0;
}

int main()
{
        RGBBitmap rgbbitmap;
    int w, h;
    GetDesktopResolution(w, h);
    rgbbitmap.height = h;
    rgbbitmap.width = w;
    rgbbitmap.bytes_per_pixel = 1;
    rgbbitmap.bytewidth = w / 100;

    RGBPixel rgbpixel;
    rgbpixel.blue = 100;
    rgbpixel.green = 100;
    rgbpixel.red = 100;
    rgbbitmap.pixels = &rgbpixel;

    save_png_to_file(&rgbbitmap, "abc.bmp");

        return 0;
}

Executing this code triggers these errors : 执行此代码会触发以下错误:

LNK1120: 9 unresolved externals LNK1120:9个未解决的外部

LNK2019: unresolved external symbol _png_create_info_struct referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”中引用的未解析的外部符号_png_create_info_struct(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)

LNK2019: unresolved external symbol _png_create_write_struct referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”中引用的未解析的外部符号_png_create_write_struct(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)

LNK2019: unresolved external symbol _png_destroy_write_struct referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)中引用的未解析的外部符号_png_destroy_write_struct

LNK2019: unresolved external symbol _png_free referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”中引用的未解析的外部符号_png_free(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)

LNK2019: unresolved external symbol _png_init_io referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”中引用的未解析的外部符号_png_init_io(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)

LNK2019: unresolved external symbol _png_malloc referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”中引用的未解析的外部符号_png_malloc(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)

LNK2019: unresolved external symbol _png_set_IHDR referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”中引用的未解析的外部符号_png_set_IHDR(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)

LNK2019: unresolved external symbol _png_set_rows referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”中引用的未解析的外部符号_png_set_rows(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)

LNK2019: unresolved external symbol _png_write_png referenced in function "int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)" (?save_png_to_file@@YAHPAU_RGBBitmap@@PBD@Z) LNK2019:函数“ int __cdecl save_png_to_file(struct _RGBBitmap *,char const *)”中引用的未解析的外部符号_png_write_png(?save_png_to_file @@ YAHPAU_RGBBitmap @@ PBD @ Z)

I'm not able to find how to fix these errors. 我找不到解决这些错误的方法。 Any brilliant suggestion, please? 有什么好建议吗?

I'm currently using Visual Studio Ultimate 2013 on a Windows 7 SP1 plateform. 我当前在Windows 7 SP1平台上使用Visual Studio Ultimate 2013。

Thanks a lot! 非常感谢!

I think, you didn't linked your libraries, just included headers. 我认为,您没有链接库,只是包含了标头。 This question anwers how you do it... 这个问题使您如何做...

If not, there is plently of what can happen: 如果没有,那么将会发生很多事情:

  • you are trying to call those functions with bad parameters 您正在尝试使用错误的参数调用这些函数
  • you included bad header file 您包括错误的头文件
  • you have mixed libraries or you are trying to link MinGW, VS2012/VS2012 compiled library to VS2013 compiler, since i don't know if they are compatible... 您有混合的库,或者您正在尝试将MinGW,VS2012 / VS2012编译的库链接到VS2013编译器,因为我不知道它们是否兼容...

You can try to download png library, create VS2012 project and try to compile it. 您可以尝试下载 png库,创建VS2012项目并尝试对其进行编译。 When you do, you should absolutely have no problems while linking... 当您这样做时,链接时绝对应该没有问题...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM