古いコードを更新していますが、誤って定義されていないマクロを内部に残してしまいました。
// "DETAIL" is not defined anywhere
if (DETAIL ("notebook")) {
// ...
}
コードは引き続きコンパイルおよびリンクされますが(.soライブラリ)、ロードされると次のようになります。
gtk3-widget-factory: symbol lookup error: /usr/lib/gtk-3.0/3.0.0/
theming-engines/libmurrine.so: undefined symbol: DETAIL
なぜこれがコンパイル時にキャッチされないのですか?CはDETAIL
定義なしで見て、それが関数だと思っていると思いint -> int
ますよね?コンパイラ(gcc)をより厳密にし、コンパイル時に文句を言う方法はありますか?ソースファイルまたはヘッダーファイルで定義されていないシンボルを直接使用しているとは思いません。