使用Clion构建DirectX程序构建报错(IDE 未报错)

今天试了一下CLion代替VS,但这个构建失败了,不知道为啥
我看了这个地方,IDE没有报错:

 d3d = Direct3DCreate9(D3D_SDK_VERSION);

img

运行结果及报错内容

构建结果:

img


我已经用#pragma comment(lib, "d3d9.lib") //不然IDE会报错
#include <d3d9.h>
全部代码(其实就是书上的):

#include <ctime>
#include <d3d9.h>
#include <windows.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "d3d9.lib")
// 项目设置
const string c_appTitle = "Direct3D_Windowed";
const int c_screenWidth = 1024;
const int c_screenHeight = 768;
// Direct3D设置
LPDIRECT3D9 d3d = NULL;
LPDIRECT3DDEVICE9 d3ddev = NULL;
bool gameOver = false;
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)

// 游戏初始化
bool Game_Init(HWND hwnd) {
    // 初始化d3d
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
    if (d3d == NULL) {
        MessageBox(hwnd, "无法初始化direct3d", "错误", MB_OK);
        return FALSE;
    }
    // 设置d3d
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
    d3dpp.BackBufferCount = 1;
    d3dpp.BackBufferWidth = c_screenWidth;
    d3dpp.BackBufferHeight = c_screenHeight;
    d3dpp.hDeviceWindow = hwnd;
    d3d->CreateDevice(D3DADAPTER_DEFAULT,
                      D3DDEVTYPE_HAL,
                      hwnd,
                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                      &d3dpp,
                      &d3ddev);
    if (d3ddev == NULL) {
        MessageBox(hwnd, "无法创建d3d驱动", "d3d驱动错误", MB_OK);
        return FALSE;
    }
    return true;
}

void Game_Run(HWND hwnd) {
    // 确保d3d已成功初始化
    if (!d3ddev) return;
    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255),1.0f,0);
    if (d3ddev->BeginScene()) {
        // 做什么?
        d3ddev->EndScene();
        d3ddev->Present(NULL, NULL, NULL, NULL);
    }
    if (KEYDOWN(VK_ESCAPE)) {
        PostMessage(hwnd, WM_DESTROY, 0, 0);
    }
}

void Game_End(HWND hwnd) {
    if (d3ddev) {
        d3ddev->Release();
        d3ddev = NULL;
    }
    if (d3d) {
        d3d->Release();
        d3d = NULL;
    }
}

LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_DESTROY:
            gameOver = true;
            break;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc;
    MSG msg;
    // 设置window属性
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.lpfnWndProc = (WNDPROC)WinProc;
    wc.style = 0;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hIcon = NULL;
    wc.hIconSm = NULL;
    wc.lpszMenuName = NULL;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wc.lpszClassName = "MainWindowClass";
    if (!RegisterClassEx(&wc)) return FALSE;
    // 创建窗口
    HWND hwnd = CreateWindow("MainWindowClass",
                             c_appTitle.c_str(),
                             WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             c_screenWidth,
                             c_screenHeight,
                             (HWND)NULL,
                             (HMENU)NULL,
                             hInstance,
                             (LPVOID)NULL);
    if (hwnd == 0) return 0;
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    if (!Game_Init(hwnd)) return 0;

    while (!gameOver) {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        Game_Run(hwnd);
    }
    Game_End(hwnd);
    return msg.wParam;
}

VS能正常运行,但这个不行

谁知道怎么办啊?