相关疑难解决方法(0)

DLL和LIB文件 - 什么和为什么?

我对DLL和LIB知之甚少,除了它们包含程序正常运行所需的重要代码 - 库.但是为什么编译器会生成它们呢?将所有代码包含在单个可执行文件中会不会更容易?DLL和LIB之间的区别是什么?

dll static-libraries

195
推荐指数
5
解决办法
11万
查看次数

链接:.a,.lib和.def文件

我正在使用GNU binutils在Windows上使用程序集构建一个dll.

我知道可以在加载可执行文件时或在运行时加载dll(使用LoadLibrary api调用).

对于加载时加载,我似乎只需要dll文件:不需要.a,.lib或.def文件.我想知道这些文件格式代表什么,它们的用途是什么.

我所知道的和一些具体问题:

  • .a是Unix上通常用于静态库的扩展..a文件是使用GNU ld 的--out-implib选项生成的.它被认为是一个"进口图书馆",足够公平.问题是"如果我在链接时不需要它,那对我来说有什么用?"

  • .lib是Windows上用于静态库的扩展,根据维基百科,在windows下也被用作"导入库",所以我强烈怀疑它们只是binutils调用.a文件的另一个名称.真假 ?

  • 我可以找到的所有页面都指出.def文件列出了dll的导出符号.这与"导入库"应该做的有点类似吗?

  • 另外,我在这里读到使用.def文件是在源文件中手动指定导出的替代方法(我做过).但我还记得读取(找不到引用).def文件为导出的符号提供索引(序号),允许更快的运行时加载.是这样吗 ?

windows dll loader

29
推荐指数
1
解决办法
4万
查看次数

为什么我需要将lib文件链接到我的项目?

我正在创建一个使用DLL的项目.要构建我的项目,我需要包含一个头文件和一个lib文件.为什么我需要包含相应的lib文件?不应该头文件声明所有需要的信息,然后在运行时加载任何所需的库/ DLL?

谢谢

c c++ dll

10
推荐指数
1
解决办法
2797
查看次数

VS2012错误:应用程序无法正常启动(0xc000007b)

在尝试运行我在Visual Studio 2012中构建的C++ SFML 32位程序的exe文件后,我收到错误"应用程序无法正确启动(0xc000007b)".我在我的项目中静态链接了SFML dll,但是以下dll和我的程序:

libsndfile-1.dll
openal32.dll
msvcp110.dll
msvcp110d.dll
msvcr110.dll
msvcr110d.dll
Run Code Online (Sandbox Code Playgroud)

问题是什么?

c++ dll sfml visual-studio-2012

5
推荐指数
1
解决办法
2万
查看次数

OpenCL在调用clGetPlatformIDs时崩溃

我是OpenCL的新手。在运行Windows 7的具有Intel(R)HD Graphics 4000的Core i5计算机上工作,我安装了支持OpenCL的最新Intel驱动程序。GpuCapsViewer确认我具有OpenCL支持设置。我使用英特尔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;
}
Run Code Online (Sandbox Code Playgroud)

GpuCapsViewer如何成功确认OpenCL支持并可以使用它运行其演示,但我却无法运行我的代码?两者必须使用相同的功能,对吗? …

c++ nvidia intel opencl

5
推荐指数
1
解决办法
3165
查看次数

静态链接到lib并仍然请求DLL

使用visual studio 2008,我有一个.H.LIB一个库的文件.我编写了一个程序,并通过项目属性引用了LIB.它编译得很好,但是当它运行时,它会要求安装DLL.如果DLL与EXE它的工作方式在同一个目录中,但如果我有LIB,那么它是不是已经意味着这些函数与我的程序静态链接?

c dll static-linking

4
推荐指数
2
解决办法
2374
查看次数