Linker MSYS2外壳上的ar在从Makefile调用时接收截断的路径?
我使用的是PortableGit安装中的git-bash.exe,环境变量来自不同的MinGW。因此,我: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
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
。。。这终于对我起作用了