ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

boost.pythonを使ったC++で書かれた共有ライブラリをimportするとエラーが発生する

PythonとC(C++)の連携をしたくて、こちらのページのsimple.cxxのサンプルを試しに入力してコンパイルしました。
c/c++をラップしてpythonで使えるように - Python | Welcome to underground

環境は、
Ubuntu 16.04.3
Python 2.7.12
gcc 5.4.0
という、Ubuntuインストールしてアップデートしたら出来あがった環境です。
コンパイルのパラメータに

/usr/include/python2.6

とあったので、python2.7ディレクトリがあるか確認するとありませんでした。
調べた結果、

$ sudo apt-get install libboost-all-dev

でインストールしたら、/usr/include/python2.7が作成されました。

コンパイルは、上記のページを参考に

$ g++ -fPIC -Wall -O2 -I/usr/include/python2.7 -lboost_python -shared -o simple.so simple.cxx

で行いました。

コンパイルが終わったので、Pythonから試してみたところ

>>> import simple
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ImportError: ./simple.so: undefined symbol: _ZTIN5boost6python7objects21py_function_impl_baseE

とエラーが表示されました。

f:id:AJYA:20170913232139j:plain
photo credit: photogenicgreen.nl Jul09_volunteers_015_APeviani via photopin (license)

コンパイル時のオプションの順序が影響

stdinなんて、なぜ表示されるんだ?と思いながら検索をすると、こちらのページに辿り着きました。
t.co
こちらのページの回答3に、

importance of the position of "-lpython2.6 -lboost_python"

とありました。
コンパイルのオプションの順番が重要なようです。
試しに、

g++ -fPIC -Wall -O2 -shared -o simple.so simple.cxx -I/usr/include/python2.7 -lboost_python

コンパイルして再度Pythonから試したところ、エラーは発生しなくなりました。

この後別のサイトのサンプルなどのコンパイルでも、上記の順序で指定してコンパイルしていれば、エラーは発生しませんでした。

犬山城に行って散策してきました

うなぎを食べ終わって、うな神を出たのは12時20分頃でした。
ajya.hatenablog.jp

まだ時間があるので、前日決めた予定のとおり、犬山城に行くことにしました。

駐車場の入場方向に注意

こちらのページによると、犬山城に一番近い犬山城第1駐車場を目指しました。
城下町駐車場情報+混雑状況速報 « 犬山観光情報

うな神から10分ほどで犬山城第1駐車場の入り口に到着しましたが、左折ではなく右折で入らなくてはなりません。
右折の列は、何台並んでいるのか数えるのも嫌になるほど並んでいました。
そのため、犬山城第1駐車場に止めるのは諦めました。

犬山城第1駐車場が左折で入れないのは、行列ができたときに南側の道路に影響しないようにするためだと思いました。
それなら、情報を観光情報のサイトの駐車場案内に書いておいて欲しいです。

上りたがるのはいいけれど

なんとか車を停めて、坂道を上り、三光稲荷神社に参拝もしながら、犬山城前に到着しました。
犬山城の中に入ると、子どもはどんどん上っていきます。
下りられるの?と聞くと大丈夫と言って、どんどん上っていきます。

天守閣まで上って、外を半周見て回ったら、もう下りると言い出します。
f:id:AJYA:20170912224326p:plain
いざ下りようとしたら、怖いと言い出して下りられません。

以前の彦根城の際は、なんとか抱っこして下りましたが、今はもう抱っこして下りられる体格ではありません。
なんとか言い聞かせて自力で下りさせました。
ajya.hatenablog.jp

犬山城を出て三光稲荷神社に戻ったら、今度はピンクのハート型絵馬に何やら書き出しました。
妻が書いた後に、子どもが家で書いているのと同じ調子で書き出したので、文字の練習になりかけていましたが、無事かけてくることができました。
matome.naver.jp

これで下まで降りようとすると、幸運の四葉守りが欲しいというので、こちらも購入しました。

歩行者天国だと思っていたら

暑い日だったので、ソフトクリームを食べられるお店を目指して城下町を歩きました。
歩いていると、車とすれ違います。
歩行者天国ではないんですね。
てっきり、車両通行止めになっていると思っていました。

芳川屋というお店が有名だというので、目指しましたが、子どもは疲れたので抱っこをせがんできます。
芳川屋

抱っこでの移動はつらいので、手近な山田五平餅店で、僕と妻はだんご型五平餅、子どもはバニラソフトクリームを食べました。
f:id:AJYA:20170912225839p:plain

少し涼んだあと、頑張って駐車場まで子どもに歩いてもらい、車に乗って帰宅しました。
途中、行けなかった芳川屋の前を通ったところ、長蛇の列ができていました。
待てない子どもを連れて並べる長さではなかったので、行くのを諦めて正解でした。


暑い中だったので、もう少し涼しくなってから、ゆっくり城下町を歩いてみたいです。

うなぎを食べてきました

うなぎをひつまぶしで食べようと思うと、すぐに思いつくのはあつた蓬莱軒です。
名古屋名物 ひつまぶし「あつた蓬莱軒」
有名だけあって混雑するのと、子どもがまだうなぎを食べられないので、子ども用の別の料理があるのかわかりません。

妻の友人から聞いた「うな神」は、子ども用の料理はありませんが、海老フライがあります。
大人はひつまぶし、子どもは海老フライという注文ができるので、行ってみることにしました。
j47.jp

予約して行くのが安心

8月6日(日)に予約なしで11時半頃行ったら、駐車場はいっぱいで停められず、諦めた経験があるので、今回は前日に予約しました。
ちなみに、お盆明けの8月19日(土)と8月20日(日)にも予約しようとしましたが、両日とも予約はなしで来店順に案内しているということでした。
繁忙期は予約のために席を空けておかないという運営をされているようです。

予約時間を開店時間にしたので、開店の少し前に着きましたが、既に何組か到着していて、ちょうど開店したところでした。
予約しておいたおかげか、子連れだからなのか、完全には仕切られていませんが座敷に通されました。

大人はひつまぶし(上)、子どもは海老フライと小ライスを注文しました。
子どもに海老フライ定食を頼もうかと思いもしましたが、梅ゼリーが少量のアルコールが入っているとのことだったので、単品の組み合わせになりました。
ホットペッパーにはクーポンがついていて、ひつまぶしなどが100円引きとなります。
www.hotpepper.jp

充分な量

f:id:AJYA:20170911234858p:plain
海老フライがまだ出されていない時点で、注文はお揃いですかと言われるというハプニングがありましたが、揃ったところで食べました。

おひつの中を4等分して、普通、薬味をいれて、お茶漬けでと食べていきました。
最後の1/4は、迷わず普通に食べていました。

子どもの海老フライも大海老が3本で、ボリュームがあります。
子どもは海老フライ3本と付け合わせのキャベツとトマト、ライスを半分くらい食べてお腹いっぱいになっていました。

テーブルにはソースを入れるような容器に入れられた、うなぎのタレが置いてあり、子どもが残したご飯も美味しくいただくことができました。


9月になってもタイミングによっては待ちが出ていたので、今後利用する際も予約するか早い時間に行くようにします。