Linker MSYS2外壳上的ar在从Makefile调用时接收截断的路径?

Linker MSYS2外壳上的ar在从Makefile调用时接收截断的路径?,linker,mingw,static-linking,msys,unix-ar,Linker,Mingw,Static Linking,Msys,Unix Ar,我使用的是PortableGit安装中的git-bash.exe,环境变量来自不同的MinGW。因此,我: WORKGROUP+user@AD-X MINGW32 /z/user/Downloads $ which ar //WORKGROUP.EX.COM/Users/user/Downloads/mingw-w64/i686-4.9.3-posix-dwarf-rt_v4-rev1/mingw32/bin/ar WORKGROUP+user@AD-X MINGW32 /z/user/Dow

我使用的是PortableGit安装中的git-bash.exe,环境变量来自不同的MinGW。因此,我:

WORKGROUP+user@AD-X MINGW32 /z/user/Downloads
$ which ar
//WORKGROUP.EX.COM/Users/user/Downloads/mingw-w64/i686-4.9.3-posix-dwarf-rt_v4-rev1/mingw32/bin/ar

WORKGROUP+user@AD-X MINGW32 /z/user/Downloads
$ gcc --version | head -1
GNU ar (GNU Binutils) 2.25
现在我正在构建一个库,最后,调用
ar
命令时链接步骤失败,如下所示:

ar -cr "Z:/user/Downloads/MyProjectNameABCDE/someLibraryABC/libs/someLibraryDEFGHI/lib/mingw/libsomeLibraryABCDebug.a" \
Z:/user/Downloads/MyProjectNameABCDE/someLibraryABC/libs/someLibraryDEFGHI/lib/mingw/obj/Debug/libs/someLibraryDEFGHI/test/someObject.o \
[...]
。。。其中列出了一系列对象-命令行长度为10000个字符,在PortableGit(
git bash.exe
)的MSYS2外壳中仍然低于32000的
getconf ARG_MAX
。但是,我得到的失败是
没有这样的文件或目录

\\WORKGROUP.EX.COM\Users\user\Downloads\mingw-w64\i686-4.9.3-posix-dwarf-rt_v4-rev1\mingw32\bin\ar.exe: Z:/user/Downloads/MyProjectNameABCDE/someLibraryABC/libs/someLibraryDEFGHI/lib/mingw/obj/Debug/libs/some: No such file or directory
。。。给出的路径显然是对象文件所在路径的截断版本。更奇怪的是,当我复制由
make
过程打印的完整
ar
命令行,并将其粘贴回同一个终端时,它会毫无错误地完成吗


有人知道为什么会发生这种情况吗?当从Makefile调用
ar
时,我该如何确保
ar完成

好的,首先我在运行
ar
命令的Makefile中找到了,我在其中添加了
-v
开关(因此,
-crv
)以获得详细信息

我可以发现,大部分命令行都是读取的,并且添加了对象,直到它达到大约8192字节的命令行,之后它被截断,并且出现了故障。这显然是一个已知的问题:

。。。尽管如此,我不太清楚为什么它应该出现在已经在
git bash.exe
中运行的
make
进程中,也就是说,MSYS2 shell

无论如何,我使用的解决方法/修复方法是使用,因为仅从Makefile执行“@echo$CMD>arscript.sh”将再次仅将8kb截断的命令行保存到文件中;因此,与最初的通话不同:

    @$(AR) ${FLAGS_FOR_AR} "$@" $(FILES_FOR_AR)
。。。我们将该行保存到文件中,然后调用
bash
将其解释为脚本;即:

    $(file >arscript.sh,@$(AR) ${FLAGS_FOR_AR} "$@" $(FILES_FOR_AR))
    bash -x arscript.sh
。。。这终于对我起作用了