是否可以使用 Mingw 和 Nvidia SDK 编译 OpenCL?
我知道它没有得到官方支持,但这没有意义。这些库不是作为静态链接库提供的吗?我的意思是一旦用任何可能的编译器编译并成功链接,应该是什么问题?
我设法编译并成功地将我的代码链接到 Nvidia SDK 提供的 OpenCL 库,但是可执行文件在 clGetPlatformIDs
处抛出段错误,这是我代码中的第一个 OpenCL 调用。
这是我的编译命令
x86_64-w64-mingw32-g++ -std=c++11 File.cpp \
-L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64" \
-I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" \
-gcoff -lOpenCL -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 \
-lshell32 -lole32 -loleaut32 \
-luuid -lodbc32 -lodbccp32 -luser32 -lgdi32 -lmingwex -m64 \
-DWIN32 -D_DEBUG -D_CONSOLE
请注意,这些库取自示例 OpenCL 代码的 .sln 文件。
我尝试了这些库的各种组合,但似乎没有任何效果。
还有没有一种方法可以使用 Mingw 进行编译并使用其他方式进行链接?我不确定其他东西可能是什么。
最佳答案
我们已经能够通过使用 MinGW reimp 和 dlltool 实用程序为“OpenCL.dll”DLL 创建一个导入库“libOpenCL.a”来做到这一点。以下是我们遵循的步骤:
第 1 步:确保安装了 mingw-utils(用于 reimp 和 dlltool)。如果不这样做,请在 MinGW 提示符下键入:
mingw-get 安装 mingw-utils
第 2 步:接下来,键入以下命令:
重新导入 OpenCL.lib
这应该会产生一个 OpenCL.def 和 libOpenCL.a 文件。如果结果类似于“无效或损坏的导入库”,则备选步骤 2 应该有效。
备选步骤 2:将 dlltool 与您可以在此处找到的 .def 文件一起使用:http://pastebin.com/f2ac38b2f .命令变为:
dlltool -l libOpenCL.a -d OpenCL.def -A -k
您现在可以链接到新创建的 libOpenCL.a。如果您仍然看到缺少的符号,请将它们添加到 .def 文件并重复 dlltool 命令。
由于在以下帖子中找到的信息,我们能够让这一切正常工作,以供引用:
关于windows - 在 Mingw Nvidia SDK 上编译 OpenCL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185955/