Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ifdef在资源文件中不工作_C++_Gcc_G++4.8_Windres - Fatal编程技术网

C++ ifdef在资源文件中不工作

C++ ifdef在资源文件中不工作,c++,gcc,g++4.8,windres,C++,Gcc,G++4.8,Windres,我正在尝试使用: #include "Resource.h" #ifdef __x86_64 IDR_D3D9X43 BINARY "D3DX9_43_64.dll" #else IDR_D3D9X43 BINARY "D3DX9_43_32.dll" #endif 在我的资源文件(.rc)中。当我为x64编译时,它应该包括x64资源。当我为x32编译时,它应该包括x32资源。但事实并非如此 该报告正在使用以下工具进行编译:

我正在尝试使用:

#include "Resource.h"

#ifdef __x86_64
IDR_D3D9X43     BINARY              "D3DX9_43_64.dll"
#else
IDR_D3D9X43     BINARY              "D3DX9_43_32.dll"
#endif
在我的资源文件(.rc)中。当我为x64编译时,它应该包括x64资源。当我为x32编译时,它应该包括x32资源。但事实并非如此

该报告正在使用以下工具进行编译:

x86_64-w64-mingw32-g++.exe -Wall -fexceptions -O2 -m64 -std=c++11  -c C:\Users\School\Desktop\TestLoader\main.cpp -o obj\Release\main.o
windres.exe --target=pe-x86-64  -J rc -O coff -i C:\Users\School\Desktop\TESTLO~1\RESOUR~1\Resource.rc -o obj\Release\Resources\Resource.res
x86_64-w64-mingw32-g++.exe  -o bin\Release\TestLoader.exe obj\Release\main.o  obj\Release\Resources\Resource.res -s -m64 -static -static-libgcc -static-libstdc++  
输出文件为bin\Release\TestLoader.exe,大小为3.02 MB

对于x64编译,它使用:

x86_64-w64-mingw32-g++.exe -Wall -fexceptions -O2 -m32 -std=c++11  -c C:\Users\School\Desktop\TestLoader\main.cpp -o obj\Release\main.o
windres.exe --target=pe-i386  -J rc -O coff -i C:\Users\School\Desktop\TESTLO~1\RESOUR~1\Resource.rc -o obj\Release\Resources\Resource.res
x86_64-w64-mingw32-g++.exe  -o bin\Release\TestLoader.exe obj\Release\main.o  obj\Release\Resources\Resource.res -s -m32 -static -static-libgcc -static-libstdc++  
用于x32编译


你知道为什么它不附带条件地包含特定的资源吗?它始终包括文件顶部的第一个资源。。又名x64版本。

您的编译器没有获取宏\uuuux86\u64。您可以检查它是否已定义,因为此宏适用于代码。只是不是为了资源。还尝试了
\u WIN64
。编译资源文件是使用不同的编译器执行的不同步骤,然后再编译代码文件。仅仅因为给定的宏是在代码编译器中定义的,并不保证在资源编译器中定义相同的宏。进行一些搜索后,似乎
x86_64-w64-mingw32-g++.exe
是64位编译器,
i686-w64-mingw32-g++.exe
是32位编译器。这也许可以解释为什么您总是定义
\uuuux86\u64
——您使用64位编译器编译32位目标。不,因为我使用
-m32
-m64
进行编译。这些开关允许我在Mingw Builds 4.8.1中编译x32和x64代码。不过我最终还是解决了。您是对的,这是一个不同的步骤,宏不会从代码编译器传递到资源编译器。我不得不将
-DMyDefinition
添加到
windres.exe
命令行。