使用创建的 DLL 文件(从应用程序调用函数)

Posted

技术标签:

【中文标题】使用创建的 DLL 文件(从应用程序调用函数)【英文标题】:Using created DLL-file (call function from application) 【发布时间】:2011-09-09 08:38:47 【问题描述】:

我有一个假问题。我有三个 C 文件:f1.c f2.c f3.c,其中包含:

// f1.c
int f1()

    return 2;


// f2.c
int f2()

    return 4;


// f3.c
int f3()

    return 10;

我已经有 3 个目标文件,当我运行以下命令时(我在 windows7 下使用 mingc):

gcc -c f1.c f2.c f3.c

我创建 dll 文件:

gcc f1.o f2.o f3.o -o test1.dll -shared

使用 DLL Export Viewer 我打开了这个文件:

如何在我的应用程序(跨平台)中使用此文件?如何调用函数 f1, f2, f3 ?

对不起我的英语不好

【问题讨论】:

跨平台? (你的意思是像windows和linux这样的跨平台吗?) 你必须在不同的平台上重新编译获取该平台的 lib。 【参考方案1】:

假设您有标头,您唯一缺少的是 A 存档,链接器需要它来确定 DLL 提供了什么。

改变这个:

gcc f1.o f2.o f3.o -o test1.dll -shared

到这里:

gcc f1.o f2.o f3.o -o test1.dll -shared -Wl,--out-imlib,libtest1.a

然后,要与共享库链接,请将-ltest1 传递给gcc

您仍然需要为每个平台和架构(x86、AMD64、IA64 等)重新编译库。例如,Windows 使用 DLL,但 Linux 使用共享对象。

更多信息请参见http://www.mingw.org/wiki/sampleDLL。

【讨论】:

【参考方案2】:
    在调用程序中包含头文件。 将调用程序链接到与库关联的 .lib 文件。 确保库位于库搜索路径中。

【讨论】:

你能告诉我在哪里可以看到一些例子吗? 该过程将在您的编译器文档中描述。第 2 步始终特定于编译器,第 3 步特定于平台。

以上是关于使用创建的 DLL 文件(从应用程序调用函数)的主要内容,如果未能解决你的问题,请参考以下文章

从 C++ dll 导出一个类?

Android studio - 从 dll 文件或 lib 文件调用函数

从 C++ 调用 DLL 中的函数

如何从一个动态链接库DLL中查看接口函数

使用非托管 C++ .dll 从 C# .exe 调用函数

如何从 UWP 应用程序调用“libheif.dll”函数