Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stop MinGW and MSYS from mangling path names given at the command line

On Windows, I'm cross-compiling a program for ARM/Linux using CodeSourcery's cross-compiler suite. I use MinGW MSYS as my command interpreter, and very often it will mangle my paths and pathnames. For example, to build my program, I invoke

arm-none-linux-gnueabi-gcc.exe -Wall -g \     -Wl,--dynamic-linker=/usr/lib/myrpath/ld-linux.so.3 \     -Wl,-rpath=/usr/lib/myrpath \     -I../targetsysroot/usr/include \     myprogram.c -o myprogram 

Of course, I want /usr/lib/myrpath inserted verbatim into the myprogram executable - the ARM Linux target I'm compiling for doesn't use MinGW or MSYS. But here's what ends up going into it:

... 0x0000000f (RPATH)            Library rpath: [C:/MinGW/msys/1.0/lib/myrpath] ... 

Not exactly what I wanted. If I invoke GCC on the cmd.exe command line directly, I get the right rpath in the executable. If I invoke GCC on the MSYS command line, I get the mangled rpath. If I invoke GCC with a Makefile that is run with make from the cmd.exe command line, I still get a mangled rpath (!)

Any ideas how I might turn off this annoying behavior?

like image 684
Ted Middleton Avatar asked Aug 30 '11 21:08

Ted Middleton


1 Answers

There is a way to suppress the path translation by setting MSYS_NO_PATHCONV=1 in Windows Git MSys or MSYS2_ARG_CONV_EXCL="*" in MSYS2.

Alternatively, you can set the variable only temporarily just for that command by putting the assignment just before the command itself:

MSYS_NO_PATHCONV=1 arm-none-linux-gnueabi-gcc.exe -Wall -g \     -Wl,--dynamic-linker=/usr/lib/myrpath/ld-linux.so.3 \     -Wl,-rpath=/usr/lib/myrpath \     -I../targetsysroot/usr/include \     myprogram.c -o myprogram 
like image 149
Igor Mukhin Avatar answered Sep 28 '22 17:09

Igor Mukhin