Main Content

ワンパス (単一パス) リンカーによるデータの循環依存の防止

現象:ソフトウェアのビルド中にビルド エラーが発生し、変数が正しく解決されません。

ツールチェーンでワンパス (単一パス) リンカーが使用されている場合、ツールチェーン定義ファイルに StartLibraryGroupEndLibraryGroup のリンカー命令を追加することによってデータの循環依存を防ぎます。ビルド プロセスにより、グループ化命令がモデル参照ライブラリ $(MODELREF_LIBS) およびユーザー ライブラリ $(LIBS) に適用されます。

たとえば、GNU gcc のようなリンカーの場合、次に示すように命令は '-Wl,--start-group''-Wl,--end-group' になります。

% ------------------------------
% Linker
% ------------------------------

tool = tc.getBuildTool('Linker');

tool.setName(           'GNU Linker');
tool.setCommand(        'gcc');
tool.setPath(           '');

tool.setDirective(      'Library',                           '-l');
tool.setDirective(      'LibrarySearchPath',                 '-L');
tool.setDirective(      'OutputFlag',                        '-o');
tool.setDirective(      'Debug',                             '-g');
tool.addDirective(      'StartLibraryGroup',  '-Wl,--start-group');
tool.addDirective(      'EndLibraryGroup',      '-Wl,--end-group');

tool.setFileExtension(  'Executable',       '');
tool.setFileExtension(  'Shared Library',   '.so');