- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编译这个:
#define COBJMACROS
#include <windows.h>
#include <d3d10.h>
#include <d3dx10.h>
HWND g_hWnd = NULL;
ID3D10Device* g_pd3dDevice = NULL;
IDXGISwapChain* g_pSwapChain = NULL;
ID3D10RenderTargetView* g_pRenderTargetView = NULL;
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg) {
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
const char lpszClassName[] = "TutorialWindowClass";
HRESULT InitWindow(HINSTANCE hInstance,int nCmdShow )
{
HWND hwnd;
WNDCLASSEX wcex;
wcex.cbSize = sizeof( WNDCLASSEX );
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
wcex.lpszMenuName = NULL;
wcex.lpszClassName = lpszClassName;
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx( &wcex ))
return E_FAIL;
g_hWnd = CreateWindow(
lpszClassName,
"DX10 TUT0: CreateWindow",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, // starting coordinates, Windows decide
640, 480, // window size
NULL,
NULL,
hInstance,
NULL
);
if(!g_hWnd)
return E_FAIL;
ShowWindow(hwnd, nCmdShow);
return S_OK;
}
HRESULT InitDevice()
{
HRESULT hr = S_OK;
RECT rc;
UINT width;
UINT height;
DXGI_SWAP_CHAIN_DESC sd;
ID3D10Resource* pBackBuffer;
D3D10_VIEWPORT vp;
GetClientRect(g_hWnd, &rc);
width = rc.right - rc.left;
height = rc.bottom - rc.top;
ZeroMemory(&sd, sizeof(sd));
sd.BufferCount = 1;
sd.BufferDesc.Width = width;
sd.BufferDesc.Height = height;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.OutputWindow = g_hWnd;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.Windowed = TRUE;
hr = D3D10CreateDeviceAndSwapChain(
NULL,
D3D10_DRIVER_TYPE_HARDWARE,
NULL,
0,
D3D10_SDK_VERSION,
&sd,
&g_pSwapChain,
&g_pd3dDevice
);
if (FAILED(hr))
return hr;
hr = IDXGISwapChain_GetBuffer(g_pSwapChain, 0, &IID_ID3D10Texture2D, ( LPVOID* )&pBackBuffer);
if( FAILED( hr ) )
return hr;
hr = ID3D10Device_CreateRenderTargetView(g_pd3dDevice, pBackBuffer, NULL, &g_pRenderTargetView);
ID3D10Resource_Release(pBackBuffer);
if( FAILED( hr ) )
return hr;
ID3D10Device_OMSetRenderTargets(g_pd3dDevice, 1, &g_pRenderTargetView, NULL);
// Setup the viewport
vp.Width = width;
vp.Height = height;
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0f;
vp.TopLeftX = 0;
vp.TopLeftY = 0;
ID3D10Device_RSSetViewports(g_pd3dDevice, 1, &vp);
return S_OK;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if(FAILED(InitWindow(hInstance, nCmdShow)))
return 0;
// Main message loop
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return ( int )msg.wParam;
}
它是 C 代码(不是 C++)。它应该使用 DirectX 10 创建 direct3d 设备。我正在使用 cmake 作为我的构建系统。这是我的 CMakeLists 文件:
cmake_minimum_required (VERSION 2.6)
project (DXTUTS C)
include_directories("C:/Program Files (x86)/Microsoft DirectX SDK (August 2009)/Include")
link_directories("C:/Program Files (x86)/Microsoft DirectX SDK (August 2009)/Lib/x86")
add_executable(tut1 WIN32 tut1.c)
target_link_libraries(tut1 d3d10 d3dx10)
但是,当我尝试编译时,出现以下链接器错误:
[ 50%] Linking C executable tut1.exe
tut1.c.obj : error LNK2001: unresolved external symbol IID_ID3D10Texture2D
tut1.c.obj : error LNK2019: unresolved external symbol D3D10CreateDeviceAndSwapC
hain referenced in function InitDevice
tut1.exe : fatal error LNK1120: 2 unresolved externals
LINK Pass 1 failed. with 1120
NMAKE : fatal error U1077: '"C:\Program Files (x86)\CMake\bin\cmake.exe"' : return code '0xffffffff'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Bin\amd64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Bin\amd64\nmake.exe"' : return code '0x2'
Stop.
如何使用 DirectX SDK 成功链接此 C 代码?
最佳答案
具体问题:
您指向 Lib/x86
库目录,但针对 x64 架构进行编译(我可以通过 ...Bin\amd64\nmake.exe< 的路径看到它
)。您应该删除 CMake 缓存(在 cmake-gui
中:菜单"file"->“删除缓存”)并重新配置 Visual Studio 10 2010
,而不是 Visual Studio 10 2010 Win64
。或者,您可以将链接器指向 Lib/x64
目录。
您缺少 dxguid
库:
target_link_libraries(tut1 d3d10 d3dx10 dxguid)
奖金:
2015 年学习 DirectX 10 没有任何意义,它已经过时了。相反,请学习 DirectX 11:它是相同的 API,但具有更多功能。
DirectX SDK 已过时,并且(Microsoft)不鼓励使用它。最新版本于 2010 年 6 月发布,您使用的是更旧的版本(2009 年 8 月)。自版本 8 起,Microsoft 已将 DirectX SDK 与 Windows SDK 合并。请参阅 this answer了解详情。
在 2015 年使用 Visual Studio 2010 已经没有任何意义了。它已经快 6 岁了,而且不支持许多现代 C 和 C++ 功能(这意味着您没有机会学习它们)。使用 Visual Studio 2015。Community edition非商业用途免费。您还将获得完整的套件和 Windows SDK(只是不要忘记在安装过程中标记“C++ 开发工具”)。
对于 DirectX 项目使用 CMake 等跨平台构建系统是没有意义的。无论如何,DirectX 仅适用于 Windows 平台。
关于c - 使用 cmake 链接 DX10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33137590/
运行 pip install cmake 时出现上述错误在 alpine linux (WSL) 上。 完整错误: /home/user# pip install cmake Collecting c
我的项目依赖 mariadb-connector-c我正在尝试使用 cmake 自动化下载、构建和链接过程。 我目前将项目下载到一个目录中,然后尝试执行生成忍者文件并运行它们,但我根本无法运行 cma
我正在尝试像这样在 cmake 中执行 execute_process execute_process(COMMAND ${CMAKE_COMMAND} -P myScript.cmake 这仅在文件
我想知道如果我没有给它任何变量告诉它在哪里找到它,cmake 如何找到我的 llvm cmake 配置。 我是 LLVM 新手。我正在构建一个 Hello World LLVM pass。我在 Ubu
我正在开发一个使用 CMake 的项目。顶CMakeLists.txt文件包含以下行: cmake_minimum_required(VERSION 3.7.2) # Kittens will die
我正在使用 Meego 1.2 工具链使用 cmake 运行构建(长话短说)。这个特定的工具链需要使用 --sysroot 选项来查找它需要的任何库。 set (CMAKE_CXX_FLAGS "-f
我们有一些源代码处理工具,可以从多个“片段”生成原始汇编文件等内容。 当使用 make 中的这些工具时,我们可以通过让源处理工具发出“依赖文件”来确保最新的构建,就像 gcc 一样-MD 标志。 例如
如何在 MSYS2 中安装和配置“cmake”?我尝试安装以下 MSYS 包 我在运行任何 cmake 命令时都收到以下错误 '''CMakeLists.txt:5 (cmake_minimum_re
有没有办法在 CMake 中得到一个变量列表?具体来说,我想要做的是调用一个现有函数,该函数接受多个变量并检查它们的计算结果是否为 true。 在某些情况下,其中一些变量将是空列表(计算结果为 fal
我有两组测试(功能测试和单元测试),我希望能够指定通过 cmake 运行哪一组。 一组测试是我想通过“make test”运行的单元测试。 另一组测试是我想通过“制作功能测试”来运行的功能测试。 目前
我的目标是查看有关调用 g++ 的详细信息由 cmake 直接调用从命令行。我不关心 make 的输出就这个问题而言。 根据official FAQ和 the accepted answer on a
我有一个生成库的CMake项目。我已经编写了一个CMake脚本FindXXX.cmake来帮助我的图书馆的用户。这样,他们可以使用find_package(XXX)并获取所需的变量。到现在为止还挺好。
当我看到带有命名空间的 CMake 库时,它们总是在表单中Parent::Component . 如果我有一个足够大的库,那么该库的子部分可能包含组件。我想知道是否可以/适合做 ParentProje
CMake 变量和属性似乎完成了非常相似的事情,我一直无法理解它们之间的区别。 它们每个都有自己的文档部分,但两者都会影响构建系统,两者都是“预先存在的”,并且两者都可以基于其他 CMake 命令动态
我有一个包含多个子目录的 CMake 项目,例如: dir1 subdir11 subdir12 dir2 subdir21 subdir22 根 CMakeLists
如果您想将静态库链接到共享库或可执行文件,同时保持所有符号可见(例如,您可以稍后打开它以找到它们),在 Linux/BSD 上执行此操作的一种非可移植方式是使用标志-Wl,--whole-archiv
CMake 自动创建一个 FooTarget.cmake文件例如添加 install(EXPORT FooTargets FILE FooTargets.cmake NAMESPACE Foo
在CMake中,ELSE和ENDIF控制流函数将表达式作为参数。根据文档,这些是optional。那么这些目的是什么?仅仅是为了维护目的而使原始IF表达式更清晰,还是提供某些功能? 最佳答案 正如您所
我是 cmake 的新手,我发现它非常令人沮丧。我试图在构建运行时评估的文件路径中使用通配符,而不是在生成构建时。 我创建了一个构建,它使用 SWIG 为某些 C++ 代码生成 Java 包装器。我可
我可能在谷歌上搜索错误,但我无法找到 .cmake 文件的用途。 我刚刚偶然发现了一个我必须使用的项目的 CMake 工具,我很难理解它是如何工作的。我明白在包含 CMakeLists.txt 的目录
我是一名优秀的程序员,十分优秀!