【问题标题】:Why Cross gdb needs libexpat-1.dll?为什么 Cross gdb 需要 libexpat-1.dll?
【发布时间】:2016-07-03 07:37:38
【问题描述】:

我刚刚通过在 MSYS2/MINGW64 上编译源代码编译了一个交叉 gdb。但是当我运行 gdb 时,它会抛出一个错误并抱怨它无法启动,因为它需要libexpat-1.dll

这是我编译 gdb 所做的:

  • 获取源代码git clone git://sourceware.org/git/binutils-gdb.git
  • 在不同的目录中:

    • export TARGET=x86_64-amd-linux-gnu
    • export PREFIX=/tmp/myToolChain
    • binutils/gdb/path/configure --with-python=/mingw64/bin/python --target=${TARGET} --prefix=${PREFIX} --disable-shared --enable-static

    • make && make install

它编译没有任何问题。但是我不知道为什么它需要这些库,而我已经静态编译它并禁用了共享库。

我也尝试在编译期间不使用libexpat,但随后它抱怨另一个库libiconv-2.dll

我搞砸了什么?

编辑:我的路径中没有C:\msys64\mingw64\bin。添加它后,我不再收到以前的错误。

但我仍然有这个问题,为什么虽然我静态链接库,但最终的二进制文件仍然需要一些库?

【问题讨论】:

  • MSYS2 具有三种不同的 shell 环境:MSYS2 Shell、MinGW-w64 Win64 Shell 和 MinGW-w64 Win32 Shell。你用的是哪一个? (即echo $MSYSTEM 的值是多少?)您运行 gdb 的具体情况如何?您看到的具体错误消息是什么?
  • 我用 MINGW-W64 Win64 shell 构建了整个东西; $ echo $MSYSTEM 返回MINGW64。我在目录中打开一个 CMD 窗口,然后运行 ​​x86_64-amd-linux-gnu-gdb.exe --version。错误是The program can't start because libexpat-1.dll is missing from your computer. Try reinstalling the program to fix this problem.

标签: linux windows cross-compiling msys2


【解决方案1】:

最终二进制文件仍在寻找库的原因是我使用了错误的标志。标志--disable-shared --enable-static 并未指定当前构建应如何链接到库,而是指定使用此二进制文件编译的代码应如何链接到其他库。

所以,为了使 gdb 二进制文件与libexpat 或任何其他库静态链接,应该像这样使用配置

/binutils/gdb/path/configure --target=${TARGET} --prefix=${PREFIX} LDFLAGS="-static"

注意LDFLAGS="-static" 标志。它强制最终的二进制链接静态地指向所有库,并且在您运行它时它不会寻找dlls。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 2022-07-17
    相关资源
    最近更新 更多