windows 为什么Cross gdb需要libexpat-1.dll?

yzuktlbb  于 2023-01-14  发布在  Windows
关注(0)|答案(1)|浏览(113)

我刚刚编译了一个跨gdb,编译了MSYS 2/MINGW 64上的源代码,但是运行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。添加它后,我不再得到以前的错误。
但是我仍然有一个问题,为什么尽管我静态地链接了库,最终的二进制文件仍然需要一些库?

30byixjq

30byixjq1#

最后的二进制文件仍然在寻找库的原因是我使用了错误的标志。--disable-shared --enable-static标志没有指定当前构建应该如何链接到库,而是指定了用这个二进制文件编译的代码应该如何链接到其他库。
因此,为了使gdb二进制文件与libexpat或任何其他库静态链接,应该使用configure,如下所示

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

注意LDFLAGS="-static"标志,它强制最终的二进制静态链接到所有库,并且在运行时不会查找dll

相关问题