Home > database >  undefined reference to `__imp_CreateSolidBrush'
undefined reference to `__imp_CreateSolidBrush'

Time:09-17

Trying to use CreateSolidBrush to change a window background color. I've included wingdi.h, I believe I've linked gdi32.lib ( however I converted gdi32.lib to a gdi32.a by using LIB2A, and I wonder if this may be an issue? ).

I wouldn't mind using another function but I worry this could be come a re-occuring issue if I'm not able to find a solution.

Some relevant code:

#include <stdio.h> 
#include <windows.h>
#include <wingdi.h>

#include <main.h>

DWORD CreateMainWindow(void)
{
    .............

    WNDCLASSEXA WindowClass = { 0 };

    WindowClass.hbrBackground = CreateSolidBrush(RGB(200, 200, 200));

    .............
}

I use a function to easily compile

int Compile()
{
        ................

        int result = 0;

        char *include = "C:\\Users\\Coding\\C\\src\\include";
        char *link = "C:\\Users\\Coding\\C\\src\\lib";
        char command[256];
        
        if(snprintf(
            command,
            sizeof(command), 
            "gcc -o main -I%s  -l gdi32 -L%s main.c", include, link) >= sizeof(command))
        {
            //exception catching and handling
        }               
        else
        {
            system(command);
        }

        return result;
}

I have no reason to believe the file isn't being linked as I'm not receiving an error.

Also I'm only using Notepad , mingw64, and command prompt.

CodePudding user response:

The error is a linker error, because it can't find the shared library symbol CreateSolidBrush.

All that is needed is linker flag -lgdi32, so it links with MinGW's libgdi32.a.

Don't try to generate this file by converting it from some other file you found which is probably built with a totally different compiler. If you already experimented with that make sure to clean up any lingering gdi32 .a or .lib files from your previous attempts.

CodePudding user response:

Well the answer was extremely simple, linkages and includes must come after the file.


C:\User> gcc main.c -lgdi32 -I<include path> -o main

If this was obvious then I apologize, hopefully this helps another confused individual

  • Related