0

我刚刚通过在 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在我的道路上。添加它后,我不再收到以前的错误。

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

4

1 回答 1

0

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

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

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

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

于 2016-07-04T00:27:57.163 回答