OpenCL 在调用 clGetPlatformIDs 时崩溃

2024-04-03

我是 OpenCL 新手。在配备 Intel(R) HD Graphics 4000、运行 Windows 7 的 Core i5 计算机上工作。我安装了支持 OpenCL 的最新 Intel 驱动程序。 GpuCapsViewer 确认我有 OpenCL 支持设置。我使用 Intel OpenCL SDK 开发了一个简单的 HelloWorld 程序。我成功编译了该程序,但在运行时,它在调用 clGetPlatformIDs() 时崩溃并出现分段错误。这是我的代码:

#include <iostream>
#include <CL/opencl.h>

int main() {
    std::cout << "Test OCL  without driver" << std::endl;

    cl_int err;
    cl_uint num_platforms;

    err = clGetPlatformIDs(0, NULL, &num_platforms);
    if (err == CL_SUCCESS) {
        std::cout << "Success. Platforms available: " << num_platforms
                << std::endl;
    } else {
        std::cout << "Error. Platforms available: " << num_platforms
                << std::endl;
    }

    std::cout << "Test OCL without driver" << std::endl;
    std::cout << "Press button to exit." << std::endl;
    std::cin.get();
    return 0;
}

为什么 GpuCapsViewer 成功确认了 OpenCL 支持并可以使用它来运行其演示,但我无法运行我的代码?两者一定使用相同的功能,对吗?

已经为此工作好几天了。甚至尝试重新安装驱动程序。有任何想法吗?

Gpu Caps Viewer 说:

驱动程序:R295.93 (r295_00-233) / 10.18.10.3496 (3-11-2014)
OPENGL:OpenGL 4.2(GeForce GT 630M/PCIe/SSE2,带 290 个扩展)
OPENCL:OpenCL 1.1,GeForce GT 630M 计算单元:2@950MHz
CUDA:GeForce GT 630M CC:2.1,多处理器:2@950MHz
PHYSX:GPU PhysX (NVIDIA GeForce GT 630M)
多 GPU:不支持多 GPU(2 个物理 GPU)


UPDATE:

编译行:

g++ -I"C:\Program Files (x86)\Intel\OpenCL SDK\4.4\include" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Test3.d" -MT"Test3.d" -o "Test3.o" "../Test3.cpp"
Finished building: ../Test3.cpp

链接器线:

g++ -L"C:\Program Files (x86)\Intel\OpenCL SDK\4.4\lib\x64" -o "TestOpenCL"  ./HelloWorld.o ./HelloWorld2.o ./Test3.o   -lOpenCL
Finished building target: TestOpenCL

操作系统:Windows 7 Ultimate 版本 6.1(内部版本 7601:Service Pack 1)


更新2,崩溃信息:

Problem Event Name: APPCRASH
Application Name:   TestOpenCL.exe
Application Version:    0.0.0.0
Application Timestamp:  53bc6ac5
Fault Module Name:  TestOpenCL.exe
Fault Module Version:   0.0.0.0
Fault Module Timestamp: 53bc6ac5
Exception Code: c0000005
Exception Offset:   0000000000002cc0
OS Version: 6.1.7601.2.1.0.256.1
Locale ID:  1033
Additional Information 1:   56e3
Additional Information 2:   56e3743a8a234df3bdeba0b507471c44
Additional Information 3:   8fe0
Additional Information 4:   8fe0ef5706153941955de850e5612393

更新3:

使用 DependencyWalker(http://dependencywalker.com/ http://dependencywalker.com/)作为转储箱的替代品。它会生成以下警告:

Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

这些警告似乎涉及以下 DLL,这些 DLL 均标有“打开文件时出错。系统找不到指定的文件(2)”错误消息。

API-MS-WIN-CORE-COM-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
DCOMP.DLL
IESHIMS.DLL

更新 4,GDB 回溯:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000402cc0 in clGetPlatformIDs ()
(gdb) backtrace full
#0  0x0000000000402cc0 in clGetPlatformIDs ()
No symbol table info available.
#1  0x0000000000402af3 in main () at ../Test3.cpp:11
        err = 0
        num_platforms = 0
        platform = 0x0

(gdb) backtrace
#0  0x0000000000402cc0 in clGetPlatformIDs ()
#1  0x0000000000402af3 in main () at ../Test3.cpp:11

更新 5,GDB DISASS:

(gdb) disass
Dump of assembler code for function clGetPlatformIDs:
=> 0x0000000000402cc0 <+0>:     jmpq   *0x4b74e8(%rip)        # 0x8ba1ae
   0x0000000000402cc6 <+6>:     nop
   0x0000000000402cc7 <+7>:     nop
End of assembler dump.

更新 6,GDB 信息共享:

(gdb) INFO SHARED
From                To                  Syms Read   Shared Object Library
0x0000000077191000  0x00000000773384e0  Yes (*)     C:\Windows\system32\ntdll.dll
0x0000000077071000  0x000000007718eab4  Yes (*)     C:\Windows\system32\kernel32.dll
0x000007fefc081000  0x000007fefc0eb13c  Yes (*)     C:\Windows\system32\KernelBase.dll
0x000007fedf8d1000  0x000007fedf8e96aa  Yes (*)     C:\Windows\system32\OpenCL.dll
0x000007fefe101000  0x000007fefe1da628  Yes (*)     C:\Windows\system32\advapi32.dll
0x000007fefe061000  0x000007fefe0fe4bc  Yes (*)     C:\Windows\system32\msvcrt.dll
0x000007fefdcc1000  0x000007fefdcde39a  Yes (*)     C:\Windows\SYSTEM32\sechost.dll
0x000007fefc6a1000  0x000007fefc7cc914  Yes (*)     C:\Windows\system32\rpcrt4.dll
(*): Shared library is missing debugging information.

二进制文件、x64 和包含文件夹:

https://drive.google.com/file/d/0BxKA63T2GnKMRW02QWZnam5lSGM/edit?usp=sharing

更新7,GPUcaps情况:

GPUcaps 检测到 2 个 GPU:

  • GPU 1:英特尔(R) 高清显卡 4000
  • GPU 2:NVIDIA GeForce GT 630M

您可以在此处查看屏幕截图:

https://drive.google.com/file/d/0BxKA63T2GnKMa00tU1gydGNJeXc/edit?usp=sharing

更新8:

根据 @antiduh 的回答,我一直在尝试直接链接到 Windows\System32 文件夹中存在的 OpenCL.dll。我使用的是 mingw64。我明白了:

Invoking: Cross G++ Linker
g++ -L"C:\Windows\System32" -o "TestOpenCL"  ./HelloWorld.o ./HelloWorld2.o ./Test3.o   -lOpenCL
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\Windows\System32/OpenCL.dll when searching for -lOpenCL
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\Windows\System32/OpenCL.dll when searching for -lOpenCL
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lOpenCL
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\Windows\System32/msvcrt.dll when searching for -lmsvcrt
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\Windows\System32/advapi32.dll when searching for -ladvapi32
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\Windows\System32/shell32.dll when searching for -lshell32
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\Windows\System32/user32.dll when searching for -luser32
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\Windows\System32/kernel32.dll when searching for -lkernel32
d:/ws/apps_inst/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\Windows\System32/msvcrt.dll when searching for -lmsvcrt

更新9: 我现在可以使用以下行手动编译、链接和运行示例代码。

g++ -I. s.cpp -L. -lOpenCL

我简化了一切,它就起作用了。这显然与 Eclipse 使用的编译和链接命令有很大不同。知道 eclipse 使用的哪个参数导致了问题吗?而且,为什么 Eclipse 首先编译为目标文件,然后尝试在两个单独的步骤中链接它们?


程序使用外部库共有三种方式:

  • 静态链接:直接将库插入到可执行文件中。外部库以 .lib 文件形式呈现,只包含打包的 .obj 文件。您的程序照常调用库中的函数。编译器从库中提取可执行代码,插入它,并对其执行完整的链接。就好像您针对导入的函数进行编译一样,就像它们来自您自己的源代码一样。
  • 加载时动态链接,也称为“隐式链接”:启动程序时加载库。外部库以包含可执行代码的 .dll 和包含 .dll 导出的 .lib 文件的形式呈现,由编译器和链接器暂时链接。链接器使用 .lib 来了解如何在运行时调用 .dll,并将延迟绑定放入程序中。当操作系统启动您的程序时,它会执行“加载时”链接 - 它会查找所有延迟绑定,尝试查找 .dll 文件,完成程序中延迟绑定的链接,并允许您运行文件。
  • “纯”运行时动态链接,又名“显式链接”:直接调用 LoadLibrary。您的程序没有对任何 .lib、.dll 或其他文件的特定引用。您的程序开始运行,它本身使用 .dll 的字符串路径调用 LoadLibrary。 LoadLibrary 将 .dll 合并到您的虚拟内存中,然后您的程序调用 GetProcAddress 来获取指向您要调用的函数的函数指针。然后,您可以使用该函数指针进行调用。

如果没有 .lib,通常无法链接到 dll。编译器希望将这些函数调用引用解析为真实地址,但我们不想放入真实地址,因为我们希望将 DLL 加载到任意内存地址(DLL 是“可重定位的”)。

根据我的理解,用作导入库的 .lib 包含主程序直接链接的存根 - 因此程序中的所有调用都会通过存根。然后,存根引用“导入地址表”。当操作系统将 DLL 加载到进程的内存中时,它会通过填写 IAT 来完成此操作。然后,存根仅通过引用正确地址的间接跳转来调用 DLL。 IAT 中的插槽。

所以如果一个DLLMathLib有导出功能Factorial如果我的 exe 正在导入,那么导入的 .lib 文件有一个实际的函数 Factorial,我的 exe 会根据它进行静态编译。 .lib 中的阶乘类似于以下伪代码:

int Factorial( int value ) { 
   // Read MathLib's IAT which should always be at address 0x8ba100.
   // Factorial's real address gets stored in slot 2, so add 8 to the address
   // to read from.
   __asm jmp *0x8ba108; // nb this is an indirect jump.
}

然后我们希望当操作系统加载该 DLL 时,该 IAT 被正确填写,否则我们就会陷入虚无。

所以我认为发生的情况是,您正在针对一个 .lib 进行编译,但“加载时”链接到了错误的 opencl.dll。 IAT 从来没有被创建过,或者创建在错误的地方,所以你陷入了虚无;这就是为什么这一行创建了段错误:

0x0000000000402cc0 <+0>: jmpq *0x4b74e8(%rip) # 0x8ba1ae

那么让我们弄清楚为什么我们链接错误。您的计算机上可能有 3 组 opencl.dll/opencl.lib 文件:

  • 来自 Kronos 的 opencl.lib/dll 实际上只是一个存根/加载器库,它可以找出计算机上真正的提供程序,并将函数调用分派到实际的正确库。
  • opencl.lib/dll 来自 Intel,来自其 SDK 和驱动程序。
  • opencl.lib/dll 来自 Nvidia 的驱动程序。

您实际上拥有以下哪些文件?我的估计是:

  • 来自 kronos 的 opencl.dll 被安装到c:\windows\system32.
  • Kronos 没有 opencl.lib
  • 可能没有来自 nvidia 的 opencl.lib,因为您没有安装他们的 SDK。
  • 您可能有来自 Intel 的 opencl.lib 和 opencl.dll,因为您确实安装了他们的 SDK。

您肯定链接到了 Intel opencl.lib,但似乎正在加载 Kronos opencl.dllc:\windows\system32。一种解决方案是在运行程序时将 Intel opencl.dll 放入程序目录中,让程序加载 Intel opencl.dll。

但是,您声明您能够使用此编译行使事情正常工作:

g++ -I. s.cpp -L. -lOpenCL

Windows 上的 gcc 有一些巧妙之处 -为了链接到一个库,你don't需要有.lib https://stackoverflow.com/a/3573527/344638。 Gcc 通过检查 dll 为您找出答案;当有人给他们一个 dll 但没有 lib 时,其他人已经想出了如何做同样的事情。在大多数其他编译器中,尤其是 Visual Studio,您需要有一个 .lib 和一个 .dll 来链接某些内容。这就是 Win SDK 安装数百个 .lib(例如 kernel32.lib)的原因。事实证明,如果编译器愿意的话,实际上可以推断它,但库作为一种古老的机制而存在。

不管怎样,你在 gcc 链接行上面运行了它,它使用搜索路径找到了一个合适的 opencl.dll,为它发明了自己的 .lib,并针对它进行编译;您启动了程序,它使用相同的搜索路径来获取 opencl.dll,它与您编译的路径相同,因此您的程序可以运行。呼。

我还是有一些建议:

  • 查找来自 Kronos 的 opencl.lib 和 opencl.dll 对“可安装客户端驱动程序”ICD 加载程序 http://www.khronos.org/news/permalink/opencl-installable-client-driver-icd-loader。然后,该加载程序将弄清楚如何在运行时绑定到特定的提供程序(nvidia、intel 等)。
  • 将 Kronos opencl.dll 与您的应用程序一起分发,这样您就不会意外地运行时链接错误的文件。
  • 卸载 Intel SDK,假设它提供特定于 Intel 的 opencl.lib/opencl.dll 文件。

关于 libs 和 dll 的一些更相关的问题:

  • 构建DLL文件时,生成的LIB文件是否包含DLL名称? https://stackoverflow.com/questions/477461/when-building-a-dll-file-does-the-generated-lib-file-contain-the-dll-name
  • 为什么 LIB 文件具有如此两面性的野兽? https://stackoverflow.com/questions/6421693/why-are-lib-files-beasts-of-such-a-duplicitous-nature
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCL 在调用 clGetPlatformIDs 时崩溃 的相关文章

  • 列出 C 常量/宏

    有没有办法使GNU C 预处理器 cpp 或其他一些工具 列出给定点上的所有可用宏及其值C file 我正在寻找特定于系统的宏 同时移植一个已经精通 UNIX 的程序并加载一堆稀疏的 UNIX 系统文件 只是想知道是否有比寻找定义更简单的方
  • Active Directory:获取用户所属的组

    我想找到用户所属的组列表 我尝试了几种解决方案http www codeproject com KB system everythingInAD aspx http www codeproject com KB system everyth
  • C++11 类型推导与 const char *

    In GotW 94 http herbsutter com 2013 08 12 gotw 94 solution aaa style almost always auto Herb Sutter 对 经典 C 声明进行了区分 const
  • Boost.Intrusive 和 unordered_map

    我希望使用侵入性的 unordered map 由于某种原因 库中只有一个 unordered set 还有一个侵入式哈希表 但我不确定它是否具有相同的功能 而且它没有相同的接口 我错了吗 我错过了 unordered map 链接吗 如果
  • 如何通过 C# 检测字符串中的阿拉伯语或波斯语字符?

    我想检测Arabic or Persian字符串中的字符 例如 在字符串中搜索 15 Aspire ES1 533 C4UH 并返回true 并在字符串中搜索 Aspire ES1 533 C4UH 并返回false string patt
  • 为什么 Resources.Load 返回 null?

    我的项目有多个精灵 位于 Assets Sprites 中 我想使用 C 脚本加载它们 我已经测试过这个 Sprite myFruit Resources Load
  • C 程序的“编译器正确”命令

    这是关于中提到的编译步骤Linux 期刊文章 https www linuxjournal com article 6463 C 程序是使用编译的cpp cc1 as and ld该文章中的命令 我能够执行这些步骤cpp as and ld
  • Cmake 链接到共享库找不到​​库

    在 Ubuntu 上 我有两个目录 build and src In src my CMakeLists txt文件有以下几行 add executable Test main cpp target link libraries Test
  • C# - 当站点上没有活动时,Quartz 调度程序停止运行

    我用quartz调度器创建了asp net站点 该作业正在后台运行 站点上没有其他活动 Quartz 调度程序每 30 分钟调度一次 IIS启动后 Scheduler运行正常 但一段时间后 Scheduler 停止运行 大约 1 小时 如果
  • 如何保存具有多个缩进设置的XmlDocument?

    我需要保存一个XmlDocument以适当的缩进归档 Formatting Indented 但有些节点及其子节点必须排在一行 Formatting None 从那时起如何实现这一目标XmlTextWriter接受整个文档的设置 在 Ahm
  • C 预处理器“/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cpp”未通过完整性检查

    在使用 Xcode 11 3 的 macOS Mojave 上 我有一个基于 Autotool 的第三方库 在终端中运行我的构建脚本时构建得很好 但在 Xcode 中运行时失败Run Script步骤为 BuildScript Showin
  • 使用 boost 几何检查两条线是否有交点

    是否可以使用 boost geometry 检查两条线段 每条线段由二维中的两个点给出 是否彼此相交 如果可能的话 boost geometry 是否还允许检查特殊情况 例如另一条线上只有一个点 数字上 或者两条线相等 如果你具体谈论Boo
  • 即使使用前向声明也会出现未定义的类型错误

    我正在阅读循环引用和前向声明 我确实知道在头文件中实现并不是一个好的设计实践 然而我正在尝试并且无法理解这种行为 使用以下代码 包含前向声明 我期望它能够构建 但是我收到此错误 Error 1 error C2027 use of unde
  • List.Except 不起作用

    我尝试减去 2 个列表 如下代码所示 assignUsers已获得 3 条记录assignedUsers有 2 行 后Except方法我仍然得到 3 行 尽管我应该得到 1 条记录 因为 2 行assignedUsers类似于assignU
  • c++ string::size 中的 CharT 元素是什么?

    From http en cppreference com w cpp string basic string size http en cppreference com w cpp string basic string size 的数量
  • 在 C# 中同步闪烁标签

    我创建了一个BlinkingLabel类 源自Forms Label 其中有一个Forms Timer这允许我启用和禁用闪烁效果 我创建了 4 个标签BlinkingLabel类型 我的问题是 如果所有 4 个标签在不同时间闪烁 则闪烁效果
  • 绑定到 ListView 项目从视图模型中点击的属性

    我正在尝试使用 itemtapped 属性将事件绑定到菜单页面上的 ListView 目前我在我的应用程序中使用 MVVM Xamarin 表单实验室 框架 我想要完成的是当用户点击菜单项时应用程序导航到正确的视图 这是xaml代码
  • Qt 对象的生命周期

    Qt 对象的生命周期是多少 Such as QTcpSocket socket new QTcpSocket 套接字什么时候会被销毁 我应该使用 delete socket 有什么区别吗 QTcpSocket socket 我找不到有关此的
  • 使用 MVVM 绑定 Xamarin.Forms 中的属性

    我在使用 Xamarin Forms 和 MVVM 制作游戏时遇到问题 游戏中有一艘由用户控制的潜艇 并且有水雷掉落 因此用户必须避开这些水雷 这些地雷是在运行时使用 2 个计时器生成的 因此我用 XAML 中的 CollectionVie
  • 索引 getter 中的 IndexOutOfRangeException

    在我的索引属性中 我检查索引是否超出范围 如果是的话 我抛出一个IndexOutOfBoundsException 当我运行代码分析器 在 VS12 中 时 它抱怨 CA1065 意外位置出现意外异常 参考CA1065的描述 仅 Syste

随机推荐

  • 为 Sublime Text 2 的嵌入式 Python 解释器安装 IPython

    我正在尝试在 sublime 中安装 IpythonIntegration 包 我安装在 bash shell 中 最新的 ipython pyzmq pyside 然而 崇高控制台仍然给我一个错误 Reloading plugin hom
  • 如何设置完全离线的 Cordova 构建?

    我使用 Cordova 创建了一个测试项目cordova create hello com example hello HelloWorld cd hello cordova platform add android 我第一次用它构建它co
  • 如何使用 DataContractJsonSerializer 处理 Json?

    我有这样的 json 结构 id 12345 first name dino last name he emails preferred 1 personal 2 business 3 other 4 我想获取电子邮件中的值 所以我写了两个
  • 为什么我不应该将序列化数组插入到我的数据库字段中?

    我刚刚看到这个问题的第一条评论在 PHP 中插入序列化数组 https stackoverflow com questions 3588957 inserting into a serialized array in php这让我想知道为什
  • 从类变量引用静态方法

    我知道有这样的情况是有原因的 但不知何故我有它 class foo static method staticmethod def test pass class variable c name i 有什么办法呢 仅供记录 我相信这应该被视为
  • C++ 抛出取消引用的指针

    下面抛出的异常对象的类型是什么 问题1 gt range error r error throw r 答案1 gt range error 的对象 问题2 gt exception p r throw p 答案2 gt 异常的切片对象 问题
  • 如何根据 RFC 2231 对文件名进行编码?

    我需要在 Content Disposition HTTP 标头属性处对文件附件进行编码 我注意到 RFC 2231 是最新的广泛接受的标准 并且想使用它 然而 我很难在核心 Java SE 和 Java EE 库中找到它的实现 你们有什么
  • 汇编,多个参数 -m32 / linux (与 C 中的 stdarg 相同)

    为了解决这个问题 我了解C 而且我仍然是汇编的初学者 所以我在这里遇到了一个小问题 我在获取多个参数时遇到了一些麻烦 如果我应该这样做的话 也许可以对它们进行计数 并在汇编代码中使用格式参数 尝试向具有许多参数的字符串添加一些字节 我知道如
  • bash.exe:警告:找不到/tmp,请创建

    为什么我的崇高文本给我警告 bash exe 警告 找不到 tmp 请创建 尽管它正在正确构建和运行代码 请帮助我看到这个警告后感到很恼火 我搜索了整个网络 但找不到任何解决方案 此错误消息具有误导性 至少对我来说 创建 tmp 目录后并没
  • Flash / Java Applet 的 NPAPI 插件替代方案

    我的问题是关于 2014 年 12 月后 chrome 宣布不支持 NPAPI 插件 Firefox 也遵循同样的规定 我的一个旧应用程序中有一个基于 NPAPI 的插件 到目前为止该插件运行良好 但在 Chrome 和 Firefox 发
  • 将常规文件复用为 Mpeg TS

    我正在使用 mpeg2 ts 和 ISDB T 综合服务数字广播 地面 的文件广播方法工作 我的问题是我无法将文件放入数据流中 或者作为原始视频 或者在mpeg ts 我使用 ffmpeg 和 avconv 这是一个测试示例 ffmpeg
  • java中的变量定义使用接口还是类型?

    ArrayList aList new ArrayList List aList new ArrayList 这两者有什么区别 哪个更好用 为什么 List 是一个接口 而 ArrayList 是该接口的实现 第二种更好 因为这意味着您可以
  • Firebird ADO.NET 4.10.0.0 数据提供程序是否可以与 Firebird 3.0 一起使用?

    我目前正在尝试将我的 ASP net 4 5 项目连接到最近发布的 Firebird 3 0 我使用的是 Visual Studio 2015 社区版 Firebird 3 64 位 并使用 NuGet 获取 ADO NET 4 10 0
  • 尝试将设备注册到 Bluemix 上的 IBM Mobile First Push 服务时,iOS 应用程序崩溃

    我有一个在 iPad mini 4 iOS 9 0 2 上运行的 iOS 9 应用程序 尝试将设备注册到 Bluemix 上的 IMFPush 服务实例时 它崩溃了 以下是在我的应用程序委托中执行注册的代码 func application
  • 如何在 BigQuery 中选择包含所有 NULL 值的数据列

    如何在 BigQuery 中选择包含所有 NULL 值的数据列 A B C NULL 1 NULL NULL NULL NULL NULL 2 NULL NULL 3 NULL 我想检索 A 列和 C 列 请您帮忙 扩展我对米哈伊尔答案的评
  • RTSP服务器java实现问题:(

    我正在编写 RTSP 服务器并遇到一些问题 我使用 VLC 作为客户端 服务器从客户端 VLC 播放器 接收 OPTIONS DESCRIBE SETUP 和 PLAY 命令并回答该命令 通过 SETUP 命令客户端发送端口号 我正在使用该
  • HTML/CSS - 神秘的顶部填充不会消失

    我正在使用 CSS 制作列布局 并且进展顺利 令人惊讶的是 我的问题不是如何让专栏发挥作用 而是如何让专栏发挥作用 这就是功能 但我的专栏顶部却出现了一个令人毛骨悚然的神秘 填充 它正在压低内容 我在这里准备了一个例子 jsFiddle h
  • Callable 应该优先于 Runnable 吗?

    我已经明白了之间的区别Runnable and CallableJava 中的接口 从 Java 1 5 开始 添加了额外的功能Runnable接口并被调用Callable以保持向后兼容性 我的问题是现在我们有Callable接口 我们应该
  • GraphQL 请求错误 - 未知参数“slug”

    我正在尝试将我的 index js 页面链接到文章模板 以使用 slug 和显示来自中间件 Drupal 站点的数据createPages 我的 index js 页面和我的页面上的数据正确显示createPages将文件路径更改为后似乎没
  • OpenCL 在调用 clGetPlatformIDs 时崩溃

    我是 OpenCL 新手 在配备 Intel R HD Graphics 4000 运行 Windows 7 的 Core i5 计算机上工作 我安装了支持 OpenCL 的最新 Intel 驱动程序 GpuCapsViewer 确认我有