読者です 読者をやめる 読者になる 読者になる

けつあご日記

こんちは.菊地です.なんか浅ーいことをいろいろ書きます

一生gccにrpathを渡せないし見れない【なれない日記20160707】

なれない日記


ついにrpathと遊べる日がきた.結果から言えば完敗.
昨日までの経緯は↓参照.
openCVのImportErrorとかの話【なれない日記20160702】 - けつあご日記
OS X El Capitanにgccを入れてシンボリックリンクを作成【なれない日記20160706】 - けつあご日記

※追記
後日できたのでまとめた↓

www.ketsuago.com

readelfとobjdumpを入れる

gccの問題は昨日(↑の二個目)解決したので,次はrpathの状態を確認するコマンドを入れる.
qiita.com

readelfとobjdumpというバイナリの情報を見るためのコマンドが必要.Macにはこれらはデフォルトでは入っていないのでインストールする.Homebrewでインストールできるらしい.

% brew install binutils

で入る.ただコマンドの名前がgreadelfとgobjdumpと,頭に"g"をつけないといけない.機能的には全く同一なのかな...まずそこが心配.

gccでrpathを渡してコンパイル

まぁやったのは↑のQiitaと同じこと.C++の適当なコードをg++でrpathを渡してコンパイルした.ただ,なぜか知らないが,

% g++ -Wl,-rpath=/tmp main.cpp

ではオプションエラーが出てしまった.

% g++ -Wl,-rpath,/tmp main.cpp

だとエラーはでなかった.イコールとコンマはどっちでも良いらしい(rpath : ASP.NET 練習帳).

greadelf,gobjdumpしてみる

できたファイルをgreadelfで調べる.

% greadelf -d -w ./a.out
readelf: エラー: ELF ファイルではありません - 始点にあるマジック番号が異なります

????ELFファイルではないと言われてしまった.ELFとはExecutable and Linkable Format,つまり実行可能なバイナリってことらしいので,gccでコンパイルしたらまさしくこれなんじゃないのか?wikipediaによるとa.outの後継らしいので,ちょっと違うのだろうか.でも↑のQiitaはできてるしな...
Executable and Linkable Format - Wikipedia

試しにLinux(CentOS6)で同じことをやってみたらうまくいった.Macだからおかしいのか?gccがおかしいのか?それともbinutils?要素が多くて何が悪いのかわからん.

gobjdumpも試す.

% gobjdump -x a.out         

a.out:     ファイル形式 mach-o-x86-64
a.out
アーキテクチャ: i386:x86-64, フラグ 0x00000012:
EXEC_P, HAS_SYMS
開始アドレス 0x0000000100000e49

セクション:
索引名          サイズ      VMA               LMA               File off  Algn
  0 .text         0000009f  0000000100000e49  0000000100000e49  00000e49  2**0
                  CONTENTS, ALLOC, LOAD, CODE
  1 __TEXT.__stubs 00000018  0000000100000ee8  0000000100000ee8  00000ee8  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 __TEXT.__stub_helper 00000038  0000000100000f00  0000000100000f00  00000f00  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  3 .const        00000001  0000000100000f38  0000000100000f38  00000f38  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .cstring      00000004  0000000100000f39  0000000100000f39  00000f39  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 .eh_frame     000000c0  0000000100000f40  0000000100000f40  00000f40  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 __DATA.__got  00000018  0000000100001000  0000000100001000  00001000  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  7 __DATA.__nl_symbol_ptr 00000010  0000000100001018  0000000100001018  00001018  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  8 __DATA.__la_symbol_ptr 00000020  0000000100001028  0000000100001028  00001028  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  9 .mod_init_func 00000008  0000000100001048  0000000100001048  00001048  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 10 .static_data  00000001  0000000100001050  0000000100001050  00001050  2**0
                  CONTENTS, ALLOC, LOAD, DATA
SYMBOL TABLE:
0000000100000e8a l       0e SECT   01 0000 [.text] __Z41__static_initialization_and_destruction_0ii
0000000100000ed3 l       0e SECT   01 0000 [.text] __GLOBAL__sub_I_main.cpp
0000000100000f38 l       0e SECT   04 0000 [.const] __ZStL19piecewise_construct
0000000100001050 l       0e SECT   0b 0000 [.static_data] __ZStL8__ioinit
0000000100000000 g       0f SECT   01 0010 [.text] __mh_execute_header
0000000100000e49 g       0f SECT   01 0000 [.text] _main
0000000000000000 g       01 UND    00 0100 __ZNSolsEPFRSoS_E
0000000000000000 g       01 UND    00 0100 __ZNSt8ios_base4InitC1Ev
0000000000000000 g       01 UND    00 0100 __ZNSt8ios_base4InitD1Ev
0000000000000000 g       01 UND    00 0100 __ZSt4cout
0000000000000000 g       01 UND    00 0100 __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
0000000000000000 g       01 UND    00 0100 __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
0000000000000000 g       01 UND    00 0200 ___cxa_atexit
0000000000000000 g       01 UND    00 0200 dyld_stub_binder

今度はなにか出てきたが,rpathに関することは書いてなさそう...オプションが違うとかもありえるのかな...

teratailに投げた

いろいろやってみたがちょっと厳しい感じだったのでteratailに投げてしまった...負けた...というか質問内容に同じ事書いたんだからここに書かなくても良かった.二度手間った.

teratail.com

回答つくかな(※追記:つきました.冒頭に貼った記事にまとめた.).



↓アフィカスリンク

Linux教科書 LPICレベル1 Version4.0対応

Linux教科書 LPICレベル1 Version4.0対応