Jak powstrzymać MinGW i MSY od zniekształcania nazw ścieżek podanych w wierszu poleceń?
W systemie Windows kompiluję program dla ARM / Linuksa za pomocą pakietu cross-compilerów CodeSourcery. Używam mingw msys jako mojego interpretera poleceń i bardzo często będzie on mżał moje ścieżki i nazwy ścieżek. Na przykład, aby zbudować mój program, wywołuję
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
Oczywiście, chcę /usr/lib/myrpath
wstawić verbatim do pliku wykonywalnego myprogram
- arm linux docelowy, dla którego kompiluję, nie używa mingw ani msys. Ale oto co się w nim kończy:
...
0x0000000f (RPATH) Library rpath: [C:/MinGW/msys/1.0/lib/myrpath]
...
Nie dokładnie tego chciałem. If I invoke gcc na cmd.exe wiersz poleceń bezpośrednio, dostaję prawo rpath w pliku wykonywalnym. Jeśli wywołam gcc w linii poleceń msys, dostaję zniekształconą ścieżkę rpath. Jeśli wywołam gcc z Makefile, który jest uruchamiany z make z cmd.exe command line, I still get a mangled rpath (!)
Jakieś pomysły, jak Mogę wyłączyć to irytujące zachowanie? 4 answers
Nie sądzę, żeby można było to wyłączyć. MSYS jest forkiem starej wersji Cygwina z szeregiem poprawek mających na celu ulepszoną integrację systemu Windows, przy czym automatyczne tłumaczenie ścieżki POSIX podczas wywoływania natywnych programów Windows jest prawdopodobnie najbardziej znaczące. Problem z tym polega na tym, że nie zawsze można stwierdzić, czy argument jest ścieżką, czy czymś innym, czy też, jak w tym przypadku, jest to w rzeczywistości ścieżka, której jednak nie należy tłumaczyć. Tłumaczenie jest prowadzone przez zbiór heurystyki .
Możesz spróbować użyć MinGW make zamiast MSYS make (tak, to różne rzeczy), który jest natywną kompilacją make Dla Windows bez obsługi ścieżki POSIX i konwersji. Zainstaluj za pomocą mingw-get install mingw32-make
i wywołaj jako mingw32-make
.
Lub możesz spróbować Cygwin, najlepiej z Cygwin build of the toolchain.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-31 05:36:31
Istnieje sposób aby powstrzymać tłumaczenie ścieżki przez ustawienie MSYS_NO_PATHCONV=1
W Windows Git MSys lub MSYS2_ARG_CONV_EXCL="*"
w MSYS2.
Alternatywnie, możesz ustawić zmienną tylko tymczasowo tylko dla tego polecenia, umieszczając przypisanie tuż przed samym poleceniem:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 05:39:14
Właśnie odkryłem sprytny trik, aby uniknąć MSYS / MinGW tłumacząc ścieżki dla Ciebie.
Jeśli do uruchomienia ścieżki użyjesz podwójnego ukośnika, to MSYS nie przetłumaczy ścieżki do formatu DOS. Tak więc w przykładzie OP, przełącznik-rpath powinien być podany w następujący sposób:
-Wl,-rpath=//usr/lib/myrpath
Wszystkie narzędzia Unix / Linux zdają się obsługiwać takie fałszywe ukośniki bez żadnego problemu, więc nawet jeśli ścieżka rpath twojego binarnego zacznie się od / / usr/... Myślę, że ładowacz postąpi słusznie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-07 03:58:56
Niestety umieszczenie dwóch ukośników do przodu w tym przykładzie nie działa zgodnie z oczekiwaniami.
rsync -rvztn --delete --exclude="/application/logs/" ...
Chcę, aby 'rsync' wykluczył pliki tylko w /application / logs, który znajduje się na najwyższym poziomie, stąd ukośnik wiodący do przodu. Dodanie dwóch ukośników do przodu nie spowoduje wykluczenia tego katalogu. Muszę uciekać się do mniej dokładnych --exclude="application/logs/"
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-19 05:12:20