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

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

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

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

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

Q&A

解決済

1回答

777閲覧

C++のシグニチャについて

strike1217

総合スコア651

GCC

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

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

0グッド

0クリップ

投稿2017/07/20 03:11

C++のシグニチャとそのライブラリについてです。

関数のオーバーロードが可能なC++ではシンボルをマングルすると思います。
名前マングリング (C++ のみ)

もう1つシグニチャというものがありますよね。
オーバーロードとオーバーライド

関数のシグニチャとは、関数名と、関数の引数の型の並び方の組み合わせのことです。

マングルシンボルがあるのになんでシグニチャなんてものが必要なんですか??
シグニチャとはどのような情報として保持されているなのでしょうか??
シンボル?ポインタ?

シグニチャについてはライブラリが用意されています。
ffcall や libffiと言ったGNUライブラリを使って実験してみました。
ffcallの方は GNUstep objective-c用のようなのでlibffiを使用しましたが・・・・

Linux mintでは、.#include<ffi.h>の段階でエラー
もう1つのDebian系では、 ffi_call()の呼び出しの段階でリンクエラーです。

GNUstep やGNU GCJ はLinux C++では使用できないんですか??

GNUstepの方は調べても全然出てこなかったので、GCJを使う事にしたのですが、これもJava?っぽいですね。
C++では使用できないのでしょうか??

Linux 64bit gcc Debian系です。
わかる方教えてください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(上の文書の文脈での)シグニチャはC++のコード上の世界、マングリングはオブジェクトコード(C++より低レベルなレイヤ)の世界の話です。C++のコードを書く分にはシグネチャで考えてください。

GNUstep やGNU GCJ はLinux C++では使用できないんですか??

はい、GNUstepはObject-Cのコンパイラ、GNU GCJはJavaのコンパイラで、どちらもC++用ではありません。

投稿2017/07/20 03:23

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/07/20 04:04

「シグニチャはC++のコード上の世界、マングリングはオブジェクトコード」 世界が違うだけで要は同じという事ですね!! man ffi_callとやると出てくるこのサンプルはなんですか? https://linux.die.net/man/3/ffi_call C言語で使用しているようですが・・・
maisumakun

2017/07/20 04:12

libffi自体はインストールしましたか?(特に、-devや-develなど、開発用ファイルがないケースもあります)
strike1217

2017/07/20 04:17

#include<ffi.h> はできるので入っているはずです。 いくつか定義されていない参照です。っと出てきます。 ffi_call()など
skitoy4321

2017/07/20 06:12 編集

コンパイルする際のオプションと、エラーメッセージを添付すれば、何かわかるかもしれません。 `定義されていない参照です。`なら、リンクオプションにlibffiを追加していないように見えますが。 環境がlinuxの場合は、`ldconfig -v`で、現在リンクできるライブラリが表示されます。
strike1217

2017/07/20 07:51

gcc sourcec.c -o source とコンパイルしました。オプションは何も入れていません。 -libffi と追加すれば良いのでしょうか? 「/usr/bin/ld : -libffi は見つかりません」と出現します。
skitoy4321

2017/07/20 08:18 編集

gccで外部ライブラリを使用する場合、リンクのオプションとして、`-l[ライブラリの名前]`というオプションが必要です。 この[ライブラリの名前]というのは、linuxの場合、soファイルの名前は通常`libxxx.so.[バージョン]`のようになっていると思いますが、この`xxx`の部分を指定します。 libffiをリンクしたい場合は、`gcc sourcec.c -lffi`のようになります。 注意点として、gcc(ldかも?)のルールで「依存されるライブラリは、依存するモジュールよりも後になければならない(重複はOK)」というのがあったと思うので、`gcc -lffi sourcec.c`だとエラーが起こると思います。
strike1217

2017/07/20 08:20

おおお〜〜 できました!! ありがとうございます!! GNU stepの方も可能なのかな??こちらはさっぱりですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問