dll 相关问题

动态链接库(DLL)是一个包含可由另一个模块(应用程序或DLL)使用的函数和数据的模块。它是Microsoft在Microsoft Windows和OS / 2操作系统中实现的共享库概念。

尝试使用 gcc 编译用 C 编写的简单 dll 失败

尝试使用 gcc 编译一个用 C 编写的简单 DLL。 尝试遵循许多教程,但即使我将文件精简到最基本的内容,也无法编译它。 test_dll.c #包括 尝试使用 gcc 编译一个用 C 编写的简单 DLL。 尝试遵循许多教程,但即使我将文件精简到最基本的内容,也无法编译它。 test_dll.c #include <stdio.h> __declspec(dllexport) int __stdcall hello() { printf ("Hello World!\n"); } 尝试使用命令编译它 gcc -c test_dll.c 失败,得到此输出 test_dll.c: In function '__declspec': test_dll.c:3:37: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'hello' __declspec(dllexport) int __stdcall hello() { ^ test_dll.c:5:1: error: expected '{' at end of input } ^ gcc版本 gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 这取决于您想要做什么: 1.在 linux 上构建 linux 的库 然后移除 __declspec(dllexport) 和 __stdcall。在 Linux 上,构建库的源代码不需要任何特殊内容。请注意,库在 Linux 上不是 DLL,它们被命名为 *.so(共享对象)。您必须使用 -fPIC 进行编译并使用 -shared 进行链接才能创建 .so 文件。请使用谷歌了解更多详细信息。 2.在 Linux 上构建 Windows DLL 安装 mingw 包(在包管理器中搜索它们)。然后,不仅仅是 gcc,而是调用针对 windows/mingw 的交叉编译器,例如i686-w64-mingw32-gcc。 3.允许跨平台构建库,包括Windows 如果您希望能够在 Windows 和 Linux 上使用相同的代码构建库,则需要一些预处理器魔法,因此 __declespec() 仅在针对 Windows 时使用。我通常使用这样的东西: #undef my___cdecl #undef SOEXPORT #undef SOLOCAL #undef DECLEXPORT #ifdef __cplusplus # define my___cdecl extern "C" #else # define my___cdecl #endif #ifndef __GNUC__ # define __attribute__(x) #endif #ifdef _WIN32 # define SOEXPORT my___cdecl __declspec(dllexport) # define SOLOCAL #else # define DECLEXPORT my___cdecl # if __GNUC__ >= 4 # define SOEXPORT my___cdecl __attribute__((visibility("default"))) # define SOLOCAL __attribute__((visibility("hidden"))) # else # define SOEXPORT my___cdecl # define SOLOCAL # endif #endif #ifdef _WIN32 # undef DECLEXPORT # ifdef BUILDING_MYLIB # define DECLEXPORT __declspec(dllexport) # else # ifdef MYLIB_STATIC # define DECLEXPORT my___cdecl # else # define DECLEXPORT my___cdecl __declspec(dllimport) # endif # endif #endif 然后在要由库导出的每个声明前面加上 DECLEXPORT,并在每个定义前面加上 SOEXPORT。这只是一个简单的例子。 由于您是在Linux上编译,因此gcc以Linux为目标。 您要做的是针对 Windows 进行交叉编译。这意味着您将需要一个交叉编译器。适用于 Ubuntu Linux 的版本是 mingw。 您可以使用安装它 apt-get install gcc-mingw32 如果上述命令不起作用,请尝试以下命令 apt-get install mingw-w64 然后你可以编译 gcc-mingw32 -c test_dll.c 需要进一步编译成dll gcc-mingw32 --shared test_dll.o -o test_dll.dll 这个 dll 就可以在 Windows 上使用了。

回答 2 投票 0

Windows c++ 服务启动时 ucrtbase.dll 出现故障

所以我开发这个程序已经有一段时间了...它的目的是充当我们 IT 团队的资产经理(将来可能会更多)。我有 2 项服务,我们将其称为“经理...

回答 0 投票 0

在 Windows 上使用 cl.exe 和 powershell 但不使用 CMake、MSBuild 或 Visual Studio 编译动态链接库 (DLL)

我想了解如何在 Windows 上编译和链接动态链接库。我通常会使用 CMake 来完成此类任务,但我想了解如何在没有 CMake 的情况下实现它(或者...

回答 1 投票 0

仅在使用 CMake 时才会对 C++ 20 共享库中的静态成员变量进行未定义引用

我一直在迁移我的项目以使用 CMake,但我偶然发现了静态成员变量的问题。即使 .cpp 文件中有它的定义。 我创建了一个最小的可复制的

回答 1 投票 0

分发用MinGW g++编译的程序

假设我使用 MinGW 64(g++ 编译器)创建并编译了一个简单的程序。在我的计算机上运行此程序并在 Process Explorer 中查找该程序正在使用哪些 DLL 文件我

回答 5 投票 0

更改 Visual Studio 2012-2015 中的输出类型。

我曾经使用Visual Studio 2008和2010。我需要将Web服务项目的输出类型更改为类库。为了得到asmx的.dll。 当我使用VS2008时,我这样做: 右C...

回答 1 投票 0

加载@next/swc-win32-ia32-msvc,但发生错误:动态链接库(dll)初始化例程失败

运行后 npm 运行开发` (下一个应用程序) 结果是这样的 ▲ Next.js 14.0.3 本地:http://localhost:3000 ⚠ 尝试加载@next/swc-win32-ia32-msvc,但发生错误:动态l...

回答 1 投票 0

避免泄露内部函数信息:如何正确检测并剥离Windows dll文件中的符号?

我有一个包含一些算法的.dll 文件,我不想泄露该算法的实现。最初我认为是安全的,因为在 Windows 中调试信息位于 .pdb 中。不过,我

回答 2 投票 0

Mingw 在编译代码时给我一个 libwinpthread-1.dll was not found 错误

我刚刚下载并安装了Mingw。我还设置了 C:\MinGW in 和 C:\MinGW\msys .0 的系统环境变量。我想测试一下我是否正确安装了它(看起来......

回答 3 投票 0

Next js - 加载@next/swc-win32-ia32-msvc,但发生错误:动态链接库(dll)初始化例程失败

运行后 `npm 运行开发` (下一个应用程序) 结果是这样的 ▲ Next.js 14.0.3 本地:http://localhost:3000 ⚠ 尝试加载@next/swc-win32-ia32-msvc,但发生错误:动态...

回答 1 投票 0

对使用 c++ 构建和使用 dll 感到困惑

背景 我是一个菜鸟,我正在通过微软官方指导学习如何在c++中构建和使用dll。 https://learn.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-

回答 1 投票 0

在笔记本pySpark上运行dll文件

我想使用“clr”方法将基于 C# 代码的 dll 文件运行到我的 pySpark 笔记本(在 databricks 中)中。不幸的是,我无法弄清楚我的“程序集名称/.NET 引用”应该是什么。该文件位于

回答 1 投票 0

如何在cgo加载库之前调用SetDefaultDllDirectories?

我想保护我的 go 应用程序免受 dll 劫持。我加载的一些 DLL 很容易受到攻击,因此首先在本地路径 (./) 中查找系统 DLL(例如 winmm.dll)。为了防止这种情况,我首先在 main() 中调用它

回答 1 投票 0

无法加载文件或程序集..即使它位于正确的位置并且构建良好

我有一个主要托管的 c# .net 4.6 应用程序,它试图调用 c++ dll(也是作为解决方案的一部分构建的)Visual Studio 2017。 我得到这个异常: “系统.IO。

回答 2 投票 0

FMUchecker - [致命][FMICAPI] 无法加载 DLL:

您好, 我将 simulink 模型导出为 FMU。当我在其上运行 FMU 检查器时,出现以下两个(致命)错误: [致命][FMICAPI] 无法加载 DLL:Eine DLL-Initialisierungsroutine ist

回答 1 投票 0

构建 C++ 库时创建 Struct 时未声明标识符

我正在使用 Visual Studio 构建 C++ 库。我创建了一个名为 GPSPosition 的结构和一个简单的函数,只是为该对象分配一些随机值。 我只是遵循指南中的所有语法:

回答 1 投票 0

如何创建C++ DLL(使用DEV -C++)并在MT4脚本中使用(一步一步)

我正在尝试使用 DEV-C++ IDE 工具创建自己的 DLL 并尝试在 MT4 脚本中使用它。 我尝试研究任何可用的示例文件 [MT4_HOME]\MQL4\Scripts\Examples\DLL\DLLSample.cpp ...

回答 1 投票 0

使用 MinGW 构建简单的 DLL

我已经阅读了这里的所有内容以及我在网上可以找到的有关执行此操作的所有内容,但这些信息已经过时、矛盾或不适用。我有一个非常简单的 C 库,我编译了...

回答 1 投票 0

如何阻止传递依赖出现在你的项目中

例如,我在项目 A 中使用 NuGet 的库 B : 参考资料: 用法: 命名空间 A.Helpers { 公共接口H...

回答 1 投票 0

有没有PNG优化的库

我知道pngcrush、optiPNG等,但它们都只是命令行工具。我需要的是一个可以在我的应用程序内部使用的 dll。很难相信没有这样的...

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.