【问题标题】:VisualStudio- Custom platformVisualStudio- 自定义平台
【发布时间】:2016-11-22 10:12:58
【问题描述】:

我有一种情况,我需要我的应用程序支持第 3 个平台选项。

X86 和 X64 已经在使用,所以我要添加一个新的自定义平台,当我选择该平台时,dll 文件会相应更改。

我的目标是在项目文件中添加一个新条件,如下所示:

 <Reference Include="newCustomPlatform" Condition="'$(Platform)'=='newCustomPlatform'">
      <HintPath>..\..\_libBinary\87\newCustomPlatform.dll</HintPath>
    </Reference>

我为此寻找了答案,但我只找到了 x86 或 x64 相关的答案。

可以吗?

【问题讨论】:

    标签: visual-studio dll x86 64-bit


    【解决方案1】:

    Visual Studio 不支持任意自定义平台。它仅支持一组已定义的受支持目标平台。一般常用的有 x86 (IA-32) 和 x86-64 (AMD64)。如果您安装了必要的构建工具,您还可以获得 Itanium 或 ARM 支持。历史版本支持 Alpha 和 PowerPC,也许还有一些我忘记的其他架构。

    当然,这对您没有任何帮助。如果您最终想要生成 32 位 x86 或 64 位 x86 二进制文件,则绝对必须使用这两个平台之一。

    您想要做的是创建新配置。默认情况下,您会为每个目标平台获得“调试”和“发布”,但您可以根据需要进行任意数量的配置。我所做的是使用必要的自定义属性创建“调试(自定义)”和“发布(自定义)”(或您想要的任何名称)。

    除此之外,也许我对您的示例阅读过多,但87 是否建议您尝试创建一个将自身限制为 x87 指令集的平台,而不使用 SSE 或更新的指令集?如果是这样,则可以使用 /arch 编译器开关进行配置。 /arch:IA32 限制您使用 x87 指令集; /arch:SSE2 是默认值,并且按照它所说的去做。其他选项包括/arch:SSE、/arch:AVX 和/arch:AVX2。这些选项会影响一些预定义宏的定义。如果支持 AVX,则将定义 __AVX__。如果支持 AVX2,则将定义 __AVX2__。否则,您需要检查_M_IX86_FP 符号的值:如果使用/arch:IA32,它将是0,如果使用/arch:SSE,它将是1,或者对于/arch:SSE2 和更高版本,它将是2 .您可以测试这些符号的值,并有条件地将链接器指向必要的库;类似:

    #if (defined _M_IX86)
        #if (defined __AVX2__)
           #pragma comment(lib, "bin\avx2\MyData.lib")
        #elif (defined __AVX__)
           #pragma comment(lib, "bin\avx\MyData.lib")
        #elif (_M_IX86_FP == 2)
           #pragma comment(lib, "bin\sse2\MyData.lib")
        #elif (_M_IX86_FP == 1)
           #pragma comment(lib, "bin\sse\MyData.lib")
        #else
           #pragma comment(lib, "bin\87\MyData.lib")
    #endif
    

    【讨论】:

    • 谢谢 - 87 不是 x87,它只是我产品的版本。我最终做的就是link。就像这样,我添加了一个新的“名称”,我可以在 ms-build 过程中调整它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2013-10-24
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多