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

时间:2016-07-03 07:37:38

标签: linux windows cross-compiling msys2

我刚刚通过编译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。添加它后,我不再收到上一个错误了。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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