Engineer's Notebook

コンピュータ関係のTipsやお役立ち情報などをエンジニアが綴ります

【解決!】ignoring invalid character `#' in expression

投稿日:

Cortex-A5 CMSISのリンカスクリプトをベースにコンパイル環境を構築していると こんなエラーが発生しました。

原因はARMCA5.ldのこの記述です。

Cプリプロセッサの書式で書いてありますが、リンカはCプリプロセッサ機能を持っていないためエラーになります。

スポンサーリンク

解決方法

どうやら、このリンカスクリプトは一旦Cプリプロセッサに通すことを前提に書かれているようです。

というとで、gccを使ってプリプロセスを実行してやります。

このコマンドで生成したARMCA5.generated.ldを使ってリンカを起動すれば正常にリンクできます。

スポンサーリンク

応用編

ARMCA5.ldやmem_ARMCA5.hを変更した際に自動的にARMCA5.generated.ldが生成できると便利ですね。そこで、こんなMakefileを作ってみました。これ単体で使ってもあまり意味はないと思いますので、ビルド用のMakefileに組み込んで使ってください。

[Makefileサンプル]

なお、LDSCRIPT_CFLAGSの“./Device/include”はmem_ARMCA5.hがあるディレクトリです。環境によって書き換えてください。

Makefileサンプルの解説

-MMD -MPでARMCA5.generated.ldの依存関係ファイルを生成し、それをincludeすることで、ARMCA5.generated.ldの自動生成を実現しています。

ただし、これだけでは依存関係ファイルは以下のように生成されてしまい、正常にmakeされません。

そこで、sedを用いて以下の様に書き換えています。

これで正しく依存関係ファイルが生成できました。

もっと簡単な方法

いっそのこと、#includeを削除してリンカスクリプトの構文に書き換えてしまうのもありですね。

アドセンス 336x280

アドセンス 336x280

関連コンテンツ

いまあなたにおすすめ

-ソフトウェア開発

Copyright© Engineer's Notebook , 2019 All Rights Reserved Powered by AFFINGER5.