質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

OSXでrpathを渡してコンパイル/rpathを確認する

H.Kikuchi
H.Kikuchi

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0評価

0クリップ

6880閲覧

投稿2016/07/07 10:17

編集2016/07/14 15:36

###環境等
OS: OSX El Capitan 10.11.5
gcc: OSXデフォルトのgcc(=clang)ではなく,Homebrewでインストールしたgcc 6.1.0

###やりたいこと
こちらのように,gccでrpathを指定してコンパイルしたい,またreadelfやobjdumpでrpathの確認をしたいと思っています.

###試したこと

上のサイトと同様に,main.cppを用意し,

C++

#include <iostream> int main(int argc, char const* argv[]) { std::cout << "aaa" << std::endl; return 0; }

これを,rpathオプションを付けてg++でコンパイルしました.

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

※なぜか-rpath=/tmpではunknown optionのエラーが出ました.カンマでも同じ意味らしい(参考リンク)のでやってみたらエラーは出ませんでした.

Macではreadelfやobjdumpはデフォルトで入っていないようなので,Homebrewでbinutilsをインストールし,greadelfやgobjdumpを使用できるようにしました.

しかし,greadelfでは

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

とエラーを返されました.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に関する情報がないように思えます.

また,Linuxで同じことを試したところ,上記サイトのように問題なくコンパイルと確認が行えました.

###質問
OSXでrpathを渡してコンパイルする,rpathを確認する方法はありますか.
また,greadelfで「ELF ファイルではありません」と返される理由もわかれば教えて下さい.gccでコンパイルしたファイルは普通ELF形式だと思うのですが...

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。