【问题标题】:How to link to shared object library in msys2?如何链接到 msys2 中的共享对象库?
【发布时间】:2022-11-01 14:42:45
【问题描述】:

我在 msys2 中有一些 c++ 代码,我试图动态链接以显示动态链接库的工作原理。

在linux下,显示调用是没有问题的。进入 gdb,我们可以看到调用通过跳转向量,最终到达所需的函数。

但是在msys2中,他们想消除dll,我能找到的所有库都是.dll.a,我认为它们是真正的静态库。

我构建了一个像这样的微不足道的小功能:

#include <cstdint>
extern "C" {
  uint64_t f(uint64_t a, uint64_t b) {
    return a + b;
  }
}

在makefile中编译:

g++ -g -fPIC -c lib1.cc
g++ -g -shared lib1.o -o libtest1.so

当我运行文件实用程序时,它说:

libtest1.so: PE32+ executable (DLL) (console) x86-64, for MS Windows

当我使用它编译代码时:

g++ -g main.cc -ltest1 -o prog

错误是 -ltest1 没有这样的文件或目录。

【问题讨论】:

    标签: c++ dll msys2


    【解决方案1】:

    链接器找不到库的原因是您当前的工作目录不在库的搜索路径中。将-L. 添加到您的链接命令中。

    MSYS2“想要消除 DLL”是不真实的。只需运行ls /mingw64/bin/*.dll,您就会看到大量的 DLL(假设您安装了一些 MINGW64 包)。用于链接的.dll.a 文件称为导入库.

    【讨论】:

      猜你喜欢
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多