【问题标题】:Convert .a file to .dll将 .a 文件转换为 .dll
【发布时间】:2011-10-21 15:14:39
【问题描述】:

这个问题肯定在某个地方得到了回答,但我找不到。我已经编写 Java 十多年了,我的 C 经验是在 Unix 上的,所以我在这里有点意见。根据我的 Unix 经验,其他人编写了 makefile,它就可以正常工作。

我从feep 下载了libtar-1.2.11 的C 源代码,并从cygwin 内部运行make。这创建了一个.a 文件和一个.exe 文件。 EXE 文件似乎本质上是在 Windows 上运行的 tar,但我想要的是让库在我自己的代码中读取和处理文件。

如果我没记错的话,那些应该在.a 文件中(存档??),这需要链接到我可以从我的 C++ 程序中使用的库中。所以我正在寻找一种方法来做到这一点。

我正在编写一个将使用.tgz 文件的库,所以我想使用这个库。我想我想把 libtar 变成一个 DLL 并自己创建一个 DLL 用于其他语言。

那么,如何将我的.a 文件转换为其他应用程序可用的文件,以及如何从我的代码中访问它?

【问题讨论】:

  • 我不熟悉转换 .a -> .dll 的机制。但是,您可以在 Windows 机器上编译源代码以生成 .dll。
  • 您不会使用 .a 文件来创建 DLL,而是直接使用源代码。
  • @MarkRansom 是对的,您需要重新编译。 .a 文件一般不包含与位置无关的代码 (PIC),因此无法动态链接到包含的代码。
  • 除了在 Windows 上,它们会这样做,因为代码总是与位置无关(-fPIC 是多余的)。

标签: c++ c windows unix tar


【解决方案1】:

生成的libmylib.a实际上是libtar-1.2.11的所有*.o的存档。
您可以通过执行nm libmylib.a 来验证这一点,它将打印所有*.o 文件。
编写代码并链接:

gcc -o my_application my_application.o -lmylib

您使用 cygwin 生成了此文件,据我所知,您无法从中生成 dll。

【讨论】:

    【解决方案2】:

    嗯,DLL 相当于 Unix 中的 shared 库(.a 是静态链接库,Windows 相当于 .LIB 文件),所以你想建立一个共享库。

    确实,当您构建时

    make LDFLAGS=-shared

    生成的libtar/libtar.exe 实际上是一个命名错误的 DLL。

    但是,请注意,cygwin 翻译的 DLL 与原生 Windows DLL 不同,并且始终依赖于 Cygwin DLL(甚至可能是安装的 Cygwin 环境)才能运行,因此如果您打算将其包含在原生 Windows 中代码,这可能不是你想要追求的方法。

    我是否可以建议您从大量死(2003 年最后一个版本)libtar 切换到带有原生 Windows build instructions 的 libarchive?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-21
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多