我正在尝试构建一个 C++ 代码库。(代码恰好是 Cap'n Proto 0.5.3,但我在其他项目中也看到了这一点。)我正在使用 MinGW-w64 中的 GCC 构建并在 MSYS2 中运行构建。GCC 是 5.2.0。制作是4.1。
我运行 Make,它运行了一段时间。然后它停止,因为它尝试运行的某些命令因错误而失败。好,可以。该错误使我感到困惑。我将 Make 输出中的命令复制并粘贴到终端,然后尝试手动运行它,没有任何更改。我预计它会以同样的方式再次失败,因此我可能会修补它以探索问题......但它成功了!(好吧,我对 libtool 一无所知……无论如何,它会生成指定的输出文件!)
上述操作的说明:
MSYS /c/programmingstuff/capnproto-c++-0.5.3
$ make capnp.exe
C:/msys64/usr/bin/sh.exe ./libtool --tag=CXX --mode=link g++ -std=gnu++11 -I./src -I./src -DKJ_HEADER_WARNINGS -DCAPNP_HEADER_WARNINGS -DCAPNP_INCLUDE_DIR='"/usr/local/include"' -mthreads -static-libgcc -static-libstdc++ -mthreads -release 0.5.3 -no-undefined -o libkj.la -rpath /usr/local/lib src/kj/common.lo src/kj/units.lo src/kj/memory.lo src/kj/refcount.lo src/kj/array.lo src/kj/string.lo src/kj/string-tree.lo src/kj/exception.lo src/kj/debug.lo src/kj/arena.lo src/kj/io.lo src/kj/mutex.lo src/kj/thread.lo src/kj/main.lo src/kj/parse/char.lo
libtool: link: you must specify an output file
libtool: link: Try `libtool --help --mode=link' for more information.
makefile:1405: recipe for target 'libkj.la' failed
make: *** [libkj.la] Error 1
MSYS /c/programmingstuff/capnproto-c++-0.5.3
$ C:/msys64/usr/bin/sh.exe ./libtool --tag=CXX --mode=link g++ -std=gnu++11 -I./src -I./src -DKJ_HEADER_WARNINGS -DCAPNP_HEADER_WARNINGS -DCAPNP_INCLUDE_DIR='"/usr/local/include"' -mthreads -static-libgcc -static-libstdc++ -mthreads -release 0.5.3 -no-undefined -o libkj.la -rpath /usr/local/lib src/kj/common.lo src/kj/units.lo src/kj/memory.lo src/kj/refcount.lo src/kj/array.lo src/kj/string.lo src/kj/string-tree.lo src/kj/exception.lo src/kj/debug.lo src/kj/arena.lo src/kj/io.lo src/kj/mutex.lo src/kj/thread.lo src/kj/main.lo src/kj/parse/char.lo
libtool: link: ar cru .libs/libkj.a src/kj/common.o src/kj/units.o src/kj/memory.o src/kj/refcount.o src/kj/array.o src/kj/string.o src/kj/string-tree.o src/kj/exception.o src/kj/debug.o src/kj/arena.o src/kj/io.o src/kj/mutex.o src/kj/thread.o src/kj/main.o src/kj/parse/char.o
libtool: link: ranlib .libs/libkj.a
libtool: link: ( cd ".libs" && rm -f "libkj.la" && cp -pR "../libkj.la" "libkj.la" )
在此之后,我再次运行 Make,它走得更远,只是再次以同样的方式挂起。我复制并粘贴以再次启动它。这个循环一直重复,直到项目完全构建或出现真正的错误。
我不认为这是 libtool 的问题。当我尝试使用相同的设置构建其他东西时,我用几个 g++ 命令看到了同样的事情。也许Make或我的shell有问题?我不知道。
我怎样才能阻止这种情况发生?或者,如果失败了——有什么好方法可以获取有关正在发生的事情的更多信息?令我困惑的是,相同的命令在 Make 运行时会失败,但在我运行时会成功。