0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mDotのサンプルコードがコンパイルできないとき

Posted at

前提条件

ハードウェア

  • multitech mDot

IDE

  • Mbed Studio 1.4.4

コンパイラ

  • ARM6

この記事について

Mulutitech mDotのサンプルコードがコンパイルできなかったときの解決策が載っています。
サンプルコードURL: https://os.mbed.com/teams/MultiTech/code/Dot-Examples/

エラーについて

mDotのサンプルコードをMbed Studioでコンパイルするとエラーが多発する。

エラーコード

[Warning] @0,0: L3912W: Option 'legacyalign' is deprecated.
[Warning] @0,0: L6439W: Multiply defined Global Symbol SetSysClock defined in .text.SetSysClock(BUILD/MTS_MDOT_F411RE/ARMC6/mbed-os/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/system_clock.o) rejected in favor of Symbol defined in .text.SetSysClock(BUILD/MTS_MDOT_F411RE/ARMC6/mbed-os/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_MTS_MDOT_F411RE/system_clock.o).
[Warning] @0,0: L6439W: Multiply defined Global Symbol SetSysClock_PLL_HSE defined in .text.SetSysClock_PLL_HSE(BUILD/MTS_MDOT_F411RE/ARMC6/mbed-os/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/system_clock.o) rejected in favor of Symbol defined in .text.SetSysClock_PLL_HSE(BUILD/MTS_MDOT_F411RE/ARMC6/mbed-os/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_MTS_MDOT_F411RE/system_clock.o).
[Error] @0,0: L6218E: Undefined symbol mts::Text::bin2hexString(std::__2::vector<unsigned char, std::__2::allocator<unsigned char> > const&, char const*, bool, bool) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol mDot::setNetworkId(std::__2::vector<unsigned char, std::__2::allocator<unsigned char> > const&) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol mDot::setNetworkKey(std::__2::vector<unsigned char, std::__2::allocator<unsigned char> > const&) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol mDot::setNetworkName(std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > const&) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol mDot::setDataSessionKey(std::__2::vector<unsigned char, std::__2::allocator<unsigned char> > const&) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol mDot::setNetworkAddress(std::__2::vector<unsigned char, std::__2::allocator<unsigned char> > const&) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol mDot::setNetworkPassphrase(std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > const&) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol mDot::setNetworkSessionKey(std::__2::vector<unsigned char, std::__2::allocator<unsigned char> > const&) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol mDot::send(std::__2::vector<unsigned char, std::__2::allocator<unsigned char> > const&, bool const&, bool const&) (referred from BUILD/MTS_MDOT_F411RE/ARMC6/examples/src/dot_util.o).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(unsigned int, unsigned int, char const*, unsigned int) const (referred from ./examples/libmDot/libmDot-ARMC6.ar(mDot.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::__vector_base_common<true>::__throw_length_error() const (referred from ./examples/libmDot/libmDot-ARMC6.ar(mDot.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned int) (referred from ./examples/libmDot/libmDot-ARMC6.ar(mDot.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*, unsigned int) (referred from ./examples/libmDot/libmDot-ARMC6.ar(mDot.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*) (referred from ./examples/libmDot/libmDot-ARMC6.ar(mDot.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (referred from ./examples/libmDot/libmDot-ARMC6.ar(mDot.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string__sub_object() (referred from ./examples/libmDot/libmDot-ARMC6.ar(mDot.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (referred from ./examples/libmDot/libmDot-ARMC6.ar(mDot.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find_first_of(char const*, unsigned int, unsigned int) const (referred from ./examples/libmDot/libmDot-ARMC6.ar(MTSText.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find(char, unsigned int) const (referred from ./examples/libmDot/libmDot-ARMC6.ar(MTSText.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*) (referred from ./examples/libmDot/libmDot-ARMC6.ar(MTSText.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::push_back(char) (referred from ./examples/libmDot/libmDot-ARMC6.ar(MTSText.o)).
[Error] @0,0: L6218E: Undefined symbol std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int, std::__1::allocator<char> const&) (referred from ./examples/libmDot/libmDot-ARMC6.ar(MTSText.o)).
Warning: L3912W: Option 'legacyalign' is deprecated.

解決方法

参考にしたサイト: https://forums.mbed.com/t/unable-to-build-xdot-examples/18516

ここのサイトでの解決方法はこのように書いてあります。

Use mbed-cli with GCC_ARM which currently you are trying to
Use GCC on MbedStudio. See : Switching to GCC - Installing | Mbed Studio Documentation 1

ARMコンパイラが原因だそうです。

解決方法は2つです。

  1. Mbed-cliでGcc Armでコンパイル。
  2. Mbed StudioのコンパイルをGcc Armに変更する。

今回は2. で解決しました。(1. でもできるそうだが、Mbed-cliで使用するライブラリの周りのバージョンを合わせるのに苦労して諦めました...)

Mbed Studioのコンパイラの変更は以下のサイトを参考にしました。
参考にしたサイト: https://os.mbed.com/docs/mbed-studio/current/installing/switching-to-gcc.html

Mbed Studio ships with Arm Compiler 6, but you can use the Arm Embedded GCC Compiler instead.
We test Mbed Studio with the Arm Embedded GCC Compiler version 9-2020-q2-update, but other versions may work.
Windows
In C:\Users{username}\AppData\Local\Mbed Studio, create the file external-tools.json and point it to your installation of GCC. For example:

{
    "bundled": {
        "gcc": "C:/Program Files (x86)/GNU Arm Embedded Toolchain/9 2020-q2-update/bin"

    },
    "defaultToolchain": "GCC_ARM"
}

Restart Mbed Studio to switch compilers.

Jsonファイルを作成して上記のコードをコピペします。

コンパイラのバージョンは 9-2020-q2-update を使用しました。
.exe版をダウンロードしてインストール。

コンパイラは以下のサイトから入手可能です。(入手にはARMのアカウント登録が必要です。)
サイト: https://developer.arm.com/downloads/-/gnu-rm

image.png

設定後、Mbed Studioを再起動すればOK。(再起動後、8 が表示されなければjsonファイルの設定が間違っています。)

まとめ

  1. バージョン 9-2020-q2-update ARMコンパイラをダウンロード。
  2. Mbed Studioの C:\Users{username}\AppData\Local\Mbed Studioexternal-tools.json を追加。
  3. jsonファイルにARMコンパイラのPATHを入力。
  4. Mbed Studioを再起動。
  5. Mbed studioでコンパイル。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?