4

CentOS5.7システムで実行しています。

ソースパッケージと.specファイルを他の人からダウンロードしました。次のようなバニラコマンドを使用して、ソースからRPMを構築しようとしています。

% rpmbuild -ba ~/rpmbuild/SPECS/foo.spec
...
Configuration summary:
======================

  Host type................: x86_64-redhat-linux-gnu
  CC.......................: gcc
  CFLAGS...................: -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror

  Package..................: sudosh2
  Version..................: 1.0.4

  Installation prefix......: /usr
  Man directory............: /usr/share/man
  sysconfdir...............: /etc
  recording input..........: no

ただし、このビルドは失敗しています。コードは少しずさんで、いくつかの警告を生成しています。このツールチェーンの一部は、 「すべての警告をエラー-Werrorにする」フラグを有効にすることです。したがって、ビルドは次のエラーで失敗します。

gcc -DHAVE_CONFIG_H -I. -I..     -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror -MT parse.o -MD -MP -MF .deps/parse.Tpo -c -o parse.o parse.c
cc1: warnings being treated as errors
sudosh.c: In function 'main':
sudosh.c:486: warning: unused variable 'written'
sudosh.c:112: warning: unused variable 'found'
cc1: warnings being treated as errors
parse.c: In function 'parse':
parse.c:20: warning: unused variable 'y'
parse.c:14: warning: unused variable 'opt'
parse.c:14: warning: unused variable 'cmt'
parse.c:14: warning: unused variable 'arg'
parse.c:10: warning: unused variable 'i'
parse.c:10: warning: unused variable 'line_number'
make[2]: *** [sudosh.o] Error 1

作成者がコードを修正することが適切な修正であることはわかっていますが、短期的にはこの問題を回避したいと思います。動作するRPMが必要です。

./configureどちらかのように見えるか、自動的にフラグautoconfを追加しています。Makefileを自分で編集する以外に、ビルド-Werrorのフラグを無効にするにはどうすればよいですか?-Werror

@pwanの回答に応じて更新します。

.specファイルはかなり一般的であり、特別なフラグを指定していません。

%build
%configure \
    --program-prefix="%{?_program_prefix}"
%{__make} %{?_smp_mflags}
4

2 に答える 2

1

Makefileを自分で編集する以外に、ビルドの-Werrorフラグを無効にするにはどうすればよいですか?

GCCマニュアルには、3.8警告を要求または抑制するオプションの解決策があります。

-W', for example -Wimplicit to request warnings on implicit declarations. Each of these specific warning options also has a negative form beginning警告をオフにする-Wno-'で始まるオプションを使用して、多くの特定の警告を要求できます。たとえば、-Wno-implicit。このマニュアルには、2つの形式のうち、デフォルトではない方のみが記載されています。

したがって、-Wno-errorCFLAGS環境変数を設定することでうまくいきました。探しているものがわかったので、Stackoverflowには豊富な回答があることがわかります:https ://stackoverflow.com/search?q =%22-Wno-%22 、特に次の場合に特定の警告を無効にする方法-壁が有効になっています。

私の特定のケースでは、「警告:未使用の変数」が原因でビルドが失敗していました。これらの特定の警告は。で抑制できます-Wno-unused-variable

私はrpmbuildを使用しているので、@ pwanによって提案されているように、これを.specファイルに入れる必要があります。私がこれを理解できる唯一の方法は次のとおりでした:

  1. rpmを1回ビルドします。

    rpmbuild -v -bb ~/rpmbuild/SPECS/sudosh.spec
    
  2. によって生成されるCFLAGSを検索します./configure

    Configuration summary:
    ======================
    
      Host type................: x86_64-redhat-linux-gnu
      CC.......................: gcc
      CFLAGS...................: -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror
    
  3. そして、これらのCFLAGSを.specファイルの `%configure%セクションに手動で追加します。

    %configure \
        --program-prefix="%{?_program_prefix}"
    #%{__make} %{?_smp_mflags}
    %{__make} %{?_smp_mflags} CFLAGS="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror -pedantic-errors -Wno-unused-variable -ansi -std=c99"
    

./configureスクリプトがアップストリームで変更された場合、.specファイルのCFLAGSを再調整する必要があるかもしれないので、上記は少しハックっぽいです。

于 2011-09-30T22:07:09.397 に答える
1

詳細な回答を提供するのに十分な情報はありませんが、スペックファイルの%prepセクションに注目する必要があります。

運が良ければ、このセクションではconfigureを呼び出します。次に、configureスクリプトが提供する引数を確認し、-Wallフラグの原因となっている引数を特定できるはずです。'configure --help'を実行すると、使用可能なフラグが一覧表示される場合があります。

次に、スペックファイルを更新して、configure呼び出しに-WallをCFLAGSに追加することをスキップするフラグが含まれるようにする必要があります。

また、configure呼び出し中にCFLAGS環境変数を設定する必要がない場合もありますが、configureスクリプトはこれらを無視またはオーバーライドする場合があります。

CFLAGS="-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror" configure --whatever
于 2011-09-29T19:17:42.997 に答える