sh файл для компиляции cpp функций на Mobaxterm на машине windows - PullRequest
1 голос
/ 14 июля 2020

ВАША ПОМОЩЬ, ПОЖАЛУЙСТА!

Мне нужно запустить файл sh, который вызывает cpp функции на Mobaxterm с машиной windows, я новичок ie в сценариях оболочки, и я не могу понять следующие сообщения об ошибках:

Creating rtlib.a...
ar: unknown option -- u
BusyBox v1.22.1 (2015-11-10 11:07:12    ) multi-call binary.

Usage: ar [-o] [-v] [-p] [-t] [-x] ARCHIVE FILES

Extract or list FILES from an ar archive

        -o      Preserve original dates
        -p      Extract to stdout
        -t      List
        -x      Extract
        -v      Verbose

Makefile:55: recipe for target 'rtlib.a' failed
make: *** [rtlib.a] Error 1

Вот весь sh код

#!/bin/bash

# Directories
DIRRTRo=RTRo
DIRrtlib=rtlib
DIRPPPTOOLS=$(pwd)

# Options
CC=g++
CFLAGS="-O3 -lm -lpthread -lrt -static"

# rtlib generation
generatertlib()
{
  echo "*****************"
  echo "rtlib generation"
  echo "*****************"
  cd $DIRrtlib || exit ; make ; cd - || exit
  #cd $DIRrtlib ; make ; cd -
}

# RTRo generation
generateRTRo()
{
  echo "******************"  
  echo "RTRo generation"
  echo "******************"
  cd $DIRRTRo ; make ; cd -
}

# getStream generation
generateGetStream()
{
  echo "********************"
  echo "getStream generation"
  echo "********************"
  $CC getStream.cpp -I$DIRrtlib $DIRrtlib/rtlib.a $CFLAGS -o getStream
}

# processStream generation
generateProcessStream()
{
  echo "************************"
  echo "processStream generation"
  echo "************************"
# Pour la livraison
 $CC processStream.cpp -I$DIRrtlib -I$DIRRTRo $DIRRTRo/libRTRo.a $DIRrtlib/rtlib.a $CFLAGS -DENAGLO -DENAGAL -DENACMP -DNFREQ=4 -DNEXOBS=1 -o processStream

}

# generateLowLevel generation
generateLowLevel()
{
  echo "***************************"
  echo "generateLowLevel generation"
  echo "***************************"
 $CC generateLowLevel.cpp -I$DIRrtlib $DIRrtlib/rtlib.a $CFLAGS -DENAGLO -DENAGAL -DENACMP -DNFREQ=4 -DNEXOBS=1 -o generateLowLevel
}

# processLowLevel generation
generateProcessLowLevel()
{
  echo "**************************"
  echo "processLowLevel generation"
  echo "**************************" 
 $CC processLowLevel.cpp -I$DIRRTRo $DIRRTRo/libRTRo.a $CFLAGS -o processLowLevel
}

# generation of all libraries, getStream and processStream
generateAll()
{
  generatertlib
  generateRTRo
  generateGetStream
  generateProcessStream
  generateLowLevel
  generateProcessLowLevel
}

# Main program

# Too many options
if [ $# -gt 1 ] ; then   
  echo "Error ! Usage : compile.sh [ clean | getStream | processStream | generateLowLevel | processLowLevel | computeErrors | sendStream | all ]"
  echo "Examples :"
  echo "  ./compile.sh"
  echo "  ./compile.sh clean"
  exit
fi

# Read option
if [ $# -eq 1 ] ; then
  if [ $1 == "clean" ] ; then
    cd $DIRrtlib ; make clean ; cd $DIRPPPTOOLS ;
    cd $DIRRTRo ; make clean ; cd $DIRPPPTOOLS ;
    rm -f processStream getStream processLowLevel computeErrors sendStream generateLowLevel
  elif [ $1 == "processStream" ] ; then
    generatertlib
    generateRTRo
    generateProcessStream
  elif [ $1 == "getStream" ] ; then
    generatertlib
    generateGetStream
  elif [ $1 == "generateLowLevel" ] ; then
    generatertlib
    generateLowLevel
  elif [ $1 == "processLowLevel" ] ; then
    generateRTRo
    generateProcessLowLevel
  elif [ $1 == "computeErrors" ] ; then
    generatertlib
    generateComputeErrors
    elif [ $1 == "sendStream" ] ; then
    generatertlib
    generateSendStream
  elif [ $1 == "all" ] ; then
    generateAll
  else
    # Bad option
    echo "Error ! Usage : compile.sh [ clean | getStream | processStream | processLowLevel | generateLowLevel | computeErrors | sendStream | all ]"
    echo "Examples :"
    echo "  ./compile.sh"
    echo "  ./compile.sh clean"
    exit
  fi
fi

# No option => all
if [ $# -eq 0 ] ; then
    generateAll
fi

Прошу прощения за вставку этого слишком длинного кода, но я действительно столкнулся с проблемами и не могу понять. Так что любая помощь будет оценена по достоинству!

1 Ответ

0 голосов
/ 14 июля 2020

Makefile в подкаталоге rtlib использует правило (явное или неявное) для создания rtlib.a с параметром команды ar u, которое BusyBox ar не знает. Решение: Используйте другую оболочку и полноценный набор инструментов. (Вы можете установить популярную цепочку инструментов Cygwin с помощью диспетчера пакетов MobaXterm.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...