【问题标题】:OpenCL code that compiles on linux, doesn't compile on windows在 linux 上编译的 OpenCL 代码,在 windows 上不能编译
【发布时间】:2010-07-19 16:10:46
【问题描述】:

我最近一直在 linux 上编写一些 OpenCL 代码(ubuntu 10.4、ati Catalyst 10.4 和 ati sdk v2.1),它在 linux 上运行良好。

当我想在 Windows 上运行我的代码时,我得到程序构建错误的抱怨

“此声明没有存储类或类型说明符”

然后“全局变量必须在 addrSapce 常量中声明”

即使有一个无效的内核也不行,地狱我评论了代码,它仍然给出了同样的错误哈哈!

很奇怪,样本 r 工作得很好。当我将代码复制到示例项目中时,它给出了相同的错误。

我正在使用 windows 7 32 位、ati stream sdk v2.1 和 v10.6 驱动程序(因为我在任何地方都找不到适用于 windows 的 10.4,这很遗憾,因为 10.6 不能保证支持OpenCL,一路走好,哈哈!)

我把所有的内核都剪掉了,只剩下这个,我仍然遇到同样的错误,在这里

__kernel void set_float( __global float* buff ,
                                   float v) { 
            buff[get_global_id(0)]=v;
}

【问题讨论】:

  • 也许看看这个帖子:devforums.amd.com/forum/…
  • 我已经看过那个帖子了,他的错误是在内核上方(外部)声明了一个全局变量,就像在你包含之后在 C 中声明一个全局变量以便它可以被所有函数使用,并且我的内核代码中没有类似的东西。我认为我得到“必须在 addrSpace 常量中声明全局变量”的原因是因为内核声明失败后的第一个错误,因此它认为参数是变量声明。

标签: opencl


【解决方案1】:

伙计,不管你被绳子咬了多少次,你永远学不会。

这只是一个非空终止的字符串问题,哈哈。

【讨论】:

    【解决方案2】:

    它对我有用(使用 AMD Stream Kernel Analyzer 成功编译)。在 Win7 64 位、sdk v2.1 和 v10.6 驱动程序上。不过你的格式很糟糕。

    【讨论】:

    • oO 我似乎找不到你编辑的内​​容......无论如何它也是在流内核分析器上为我编译的(代码显然是正确的),它只是不会编译从视觉工作室运行时:S
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多