7

Vulkan を使用するための最低限のプログラムをセットアップしようとしています。LunarG SDK をインストールしました。基本的に を呼び出すだけの小さなプログラムがありますvkCreateInstance。私はこの行でコンパイルしました:

g++ -std=c++11 -I/c/VulkanSDK/1.0.3.1/Include -L/c/VulkanSDK/1.0.3.1/Bin main.cpp -lvulkan-1

64 ビット mingw (MSYS2) を使用すると、次のコンパイラ エラーが発生します。

 relocation truncated to fit||R_X86_64_32 against symbol `__imp_vkCreateInstance' defined in .idata$5 section in C:\VulkanSDK\1.0.3.1\Bin/vulkan-1.lib(vulkan-1.dll.b)|

私は何をしますか?正しいライブラリにリンクしていますか?

4

4 に答える 4

3

皆さんは私より幸運でしたが、私は立方体の例を構築しようとしていました。再配置の切り詰められた問題が発生し続け、掘り下げた後、それを古いバグレポート/サポートリクエストに接続することができました: https://sourceforge.net/p/mingw-w64/support-requests/19/

私の解決策は、dlltool を使用して vulkan-1.dll からシンボルを抽出することでした (別の古いハウツー - http://www.mingw.org/wiki/createimportlibraries )。シンボルを抽出できなかったため、これは完全には機能しなかったため、手動で入力する必要がありました (幸いなことに、gcc は未定義のシンボルごとに 1 行を出力します)。基本的に、これが私の vulkan-1.def ファイルの始まりです (関数を 1 行に 1 つずつ末尾に追加します)。

LIBRARY vulkan-1.dll
vkAllocateCommandBuffers
vkAllocateDescriptorSets
vkAllocateMemory
; add functions as needed, one per line

このファイルを準備したら、実行します

dlltool -d vulkan-1.def -l libvulkan-1.a

-L を使用できるようになりました。-lvulkan-1 を使用して、再配置の問題を回避します。私の完全なgccコマンドラインは次のとおりです。

gcc -g cube.c -o cube.exe -I /c/VulkanSDK/1.0.8.0/Include/ -D_WIN32 -DVK_USE_PLATFORM_WIN32_KHR -L . -lvulkan-1 -mwindows

そして出来上がり、キューブが機能します。

注: コンパイルするには、wcstombs_s を wcstombs に置き換える必要もありました。結果の行は次のようになります。

numConverted = wcstombs(argv[iii], commandLineArgs[iii], wideCharLen + 1);
于 2016-04-16T23:41:50.797 に答える