相关疑难解决方法(0)

86
推荐指数
8
解决办法
4万
查看次数

如何从DLL生成导入库(LIB文件)?

是否可以从DLL自动生成MSVC导入库(LIB文件)?怎么样?

windows dll visual-c++

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

动态链接-Linux与。视窗

在Windows下,当我在MSVC的DLL项目中编译C / C ++代码时,我得到2个文件:

  1. MyDll.dll
  2. MyDll.lib

据我了解,MyDll.lib其中包含某种指示符表,用于指示dll中的函数位置。使用此dll时(例如在exe文件中),MyDll.lib在链接期间会嵌入到exe文件中,因此在运行时它“知道”函数的位置MyDll.dll并可以使用它们。

但是,如果我在Linux下编译相同的代码,我只会得到一个MySo.so不带 文件的文件MySo.a(相当于libLinux中的文件),那么MySo.so如果在链接过程中未嵌入任何内容,Linux下的可执行文件如何知道函数的位置?

c c++ linux windows shared-libraries

10
推荐指数
2
解决办法
179
查看次数

如何在 CMake 中使用动态链接库?

我有简单的程序如下:

CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)

project(test LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

LINK_DIRECTORIES(${PROJECT_SOURCE_DIR})

add_executable(test main.cpp)
target_include_directories(test PRIVATE ${PROJECT_SOURCE_DIR})    
target_link_libraries(test PRIVATE power.dll)
Run Code Online (Sandbox Code Playgroud)

主.cpp:

#include <iostream>
#include "power.h"

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    power(4.);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

功率.h:

#ifndef POWER_H
#define POWER_H

double power(double number) noexcept;

#endif // POWER_H
Run Code Online (Sandbox Code Playgroud)

的实现power.h在一个名为 .dll 的文件中power.dll。如果我用 MinGW 7.3.0 X64 编译这个项目说:

error: undefined reference to `power(double)'
Run Code Online (Sandbox Code Playgroud)

如果我用 MSVC 2017 X64 编译它说:

error: LNK1104: cannot open file 'power.lib' …
Run Code Online (Sandbox Code Playgroud)

c++ windows cmake dynamic-linking

8
推荐指数
1
解决办法
9104
查看次数

无法引用库项目(DLL),因为缺少.lib文件

我正在尝试启动一个C++游戏引擎项目.

我对dll和lib的了解不多,但是我认为引擎本身就是一个dll而且我会有单独的dll项目,如渲染器,输入等引擎将使用的引擎dll将被引擎使用游戏.

我似乎在demo.exe项目中引用了引擎项目(通过添加引用并添加其他包含目录的路径)但是当我尝试在引擎dll项目中添加对renderer dll项目的引用时我得到了:

错误LNK1104:无法打开文件'MyPath\Renderer.lib'MyPath\LINK Engine

为什么提到libs?

c++ dll reference visual-studio visual-c++

7
推荐指数
2
解决办法
6716
查看次数

如何从未修饰的stdcall DLL自动生成导入库?

处理从DLL创建LIB的一般方法在如何在有.dll文件和头文件的情况下创建.lib文件中描述- 仍然是为具有未修饰stdcall函数的DLL创建导入库(例如核心WinAPI DLL kernel32.dll等) .),一个要经过一个相当漫长和复杂的过程(如例如描述这里).对于具有许多功能的DLL,此过程非常耗时且容易出错 - 当原始DLL发生更改时(例如,由于供应商更新),它在自动渲染情况下也很容易失败.

有没有一种有效的自动化方法?

c++ dll name-mangling stdcall

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

相当于Linux中的导入库

在Windows C ++中,当您要链接到DLL时,必须提供一个导入库。但是在GNU构建系统中,当您想链接.so文件时,就相当于您不希望使用的dll。为什么是这样?是否有等效的Windows导入库。

注意:我并不是说要在Windows中使用GNU C ++的情况,在这种情况下还必须使用导入库。分割线是在Windows C ++和Linux C ++之间。

c++ linux windows gnu

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

从.dll导入函数时,为什么需要.lib文件?

您能帮我了解一下,为什么从dll导入函数和数据时我们需要.lib文件吗?

我听说,它包含来自相应dll的导出函数和数据元素的列表,但是当我使用CFF Explorer探索我的dll时,我发现dll已经具有导出函数的地址,因此从理论上讲我可以链接我的.dll的程序,没有任何其他文件。

您能否详细解释一下.lib文件中存储的数据类型?
而且,是的,我知道,Visual Studio迫使我们将.lib文件添加到其他依赖项部分,但是为什么它真正需要它们呢?

c++ dll visual-studio lib

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