【问题标题】:Using created DLL-file (call function from application)使用创建的 DLL 文件(从应用程序调用函数)
【发布时间】: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。

标签: c++ c dll


【解决方案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】:
    1. 在调用程序中包含头文件。
    2. 将调用程序链接到与库关联的 .lib 文件。
    3. 确保库位于库搜索路径中。

    【讨论】:

    • 你能告诉我在哪里可以看到一些例子吗?
    • 该过程将在您的编译器文档中描述。第 2 步始终特定于编译器,第 3 步特定于平台。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多