[Armadillo:03447] Re: Armadillo-9 リンクエラー

Yuji Watanabe email@hidden
2008年 9月 29日 (月) 10:27:03 JST


竹之下様

お世話になります。

本件、自己解決しましたので、ご報告致します。

原因は、 __sync_add_and_fetch が boost の 『boost/detail/atomic_count.hpp』 で使われているようで

#elif defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 )

と記述してある箇所に、

&& !defined(__arm__)

を追加することで、無事ビルドすることが出来ました。

お騒がせしました。


2008/09/26 10:50 Yuji Watanabe <email@hidden>:
> 竹之下様
>
> お世話になります。
>
> 使用環境は、自分で構築した環境です。
> Ubuntu8.04上で開発を行っています。
> 開発環境は、Code::Blocks8.02というのを使用しています。
>
> 使用しているコンパイラは、arm-linux-gcc 4.1.2 です。
>
>> boostというのは、C++のSTLライブラリでしょうか?
> そうです。
> C++0xに一部取り入れられています。
>
> ライブラリは、RS-232Cを使用したシリアル通信用ライブラリ(libserialarm.so)とRFIDリーダライタを
> 制御するライブラリ(libnfcarm.so)から成っています。
> 両ライブラリともboostを使用しています。
>
> 以下、サンプルのソースです。
> //============================================
> #include <iostream>
> #include <string>
>
> #include "libnfc.h"
>
> using namespace std;
>
> int main()
> {
>    if (nfc_init()) {
>        printf("nfc_init fail.\n");
>    }
>
>    int dev = nfc_open("/dev/ttyUSB0");
>    if (dev <= 0) {
>        printf("nfc_open fail.\n");
>        return 0;
>    }
>
>    printf("open success.[%d]\n", dev);
>
>    char version[256];
>    int ret = nfc_device_get_version(dev, version);
>    if (ret != 0) {
>        printf("nfc_device_get_version fail.[%.8X]\n", ret);
>    } else {
>        printf("%s\n", version);
>        MifarePollingResponse res;
>        MifareUID muid;
>        ret = nfc_mifare_polling(dev, 0, muid, res);
>        if (ret != 0) {
>            printf("nfc_mifare_polling fail.[%.8X]\n", ret);
>        } else {
>            string uid = "";
>            for (int i = 0; i < res.uidSize; i++) {
>                char buf[2];
>                sprintf(buf, "%.2X", res.uid[i]);
>                uid += buf;
>            }
>            printf("uid = [%s]\n", uid.c_str());
>        }
>    }
>
>    nfc_close(dev);
>
>    return 0;
> }
> ============================================//
>
> ビルドログを以下のとおりです。
> //============================================
> -------------- Build: Debug in sample_test_arm ---------------
>
> コンパイル中: main.cpp
> リンク中 コンソール実行ファイル: bin/Debug/sample_test_arm
> /home/watanabe/libraries/lib/Linux/arm/debug/libserialarm.so:
> undefined reference to `__sync_add_and_fetch_4'
> collect2: ld はステータス 1 で終了しました
> プロセスはステータス 1 で終了しました (0 分 0 秒)
> 1 個のエラー、 0 個の警告
> ============================================//
>
> 以上、よろしくお願いします。
>
> 2008/09/26 10:32 Takenoshita Koyo <email@hidden>:
>> 竹之下です。
>>
>> エラーは、__sync_fetch_and_add_4が見つからないといっていますね。
>> 何かのライブラリがリンクできていないのかもしれません。
>>
>> 使用している環境
>> ATDEを使われていますか?それとも、自分で構築した環境でしょうか?
>> 使用しているコンパイラはなんでしょうか?
>> boostというのは、C++のSTLライブラリでしょうか?
>> 実行したコマンド
>> そのときのエラーログ
>> を教えていただければ、何か分かるかもです。
>> (できれば、現象が発生する最小のソースか、
>> サンプルプログラムの該当個所の抜粋を教えていただけると、
>> 情報が得られやすいと思います。)
>>
>> 2008-09-26 (金) の 10:15 +0900 に Yuji Watanabe さんは書きました:
>>> いつもお世話になります。
>>> 渡辺です。
>>>
>>> Armadillo-9の開発環境で、boost_1_36_0を使用したRFIDリーダライタのライブラリ
>>> を作成し、ライブラリの動作確認を行うためサンプルプログラムを作成しました。
>>>
>>> ところが、サンプルプログラムをビルドすると、
>>>
>>> undefined reference to `__sync_fetch_and_add_4'
>>>
>>> というリンクエラーが出て、リンク出来ません。
>>> インターネットで色々とググってみたのですが、良く分かりませんでした。
>>>
>>> 何かいい解決策はないでしょうか?
>>>
>>> 以上、何卒よろしくお願い致します。
>>> _______________________________________________
>>> armadillo mailing list
>>> email@hidden
>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>> --
>> Takenoshita Koyo
>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
>



armadillo メーリングリストの案内