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

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

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

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

Q&A

解決済

4回答

2862閲覧

静的ライブラリでの実行ファイルの作り方

cingyan

総合スコア29

C

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

0グッド

0クリップ

投稿2016/07/14 07:05

「C言語によるプログラミング 応用編」という本を読んでいて、分からないところがあり質問いたします。

静的(スタティック)ライブラリ作成、というところで、

func1.c

void func1(void) { printf("func1\n"); }

func2.c

void func2(void) { printf("func2\n"); }

gccで次のコマンドを行います

$ gcc -c func1.c $ gcc -c func2.c $ ar -r libmyfunc.a func1.o func2.o ar: libmyfunc.a を作成しています

次に実行プログラムを作成します。
3_18.c

#include <stdio.h> void func1(); //本には書いてありませんが、warningが出るので足しました。 void func2(); //同上 int main(void) { func1(); func2(); return 0; }

そして、コンパイル/リンク。

$ gcc 3_18.c libmyfunc.a -o test

実行

$ test $

私が期待していたのは、次のようになるものだったのですが、上のような実行結果で良いのでしょうか。

$ test $ func1 $ func2

実行ファイルを作成したはずなのに、何も表示されないので、質問いたしました。
ご回答よろしくお願いします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

testはシェルコマンドなので、コンパイル結果を実行したいなら./testと打ってください。

投稿2016/07/14 07:17

catsforepaw

総合スコア5938

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

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

Chironian

2016/07/14 07:27

ああ、linuxなら確かにそうなりそうですね。なるほど。
cingyan

2016/07/15 05:02

ご回答、ありがとうございました。 仰る通り、 ./test これで、思った通りの結果となりました。 今まで、サンプルプログラムを実行する時、 ./a.out としていたのを、忘れていました。 ありがとうございました。
guest

0

void func1(); //本には書いてありませんが、warningが出るので足しました。
void func2(); //同上

これらによってライブラリとは別の何もしないfunc1(),func2()ができていてそれを実行しています

たした関数のプロトタイプを削除して

#include<libmyfunc>

をたせば想定の結果になると思います

投稿2016/07/14 07:13

kutsulog

総合スコア985

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

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

cingyan

2016/07/15 04:59

ご回答、ありがとうございました。 #include<libmyfunc> これを入れると、 3_18.c:2:20: fatal error: libmyfunc: そのようなファイルやディレクトリはありません compilation terminated. と表示されました。 #include "libmyfunc.a" これで試すと、大量のワーニングやエラーがでました。 ./test これで解決しました。 ありがとうございました。
ttyp03

2016/07/15 05:59

解決できない回答。
kutsulog

2016/07/15 06:42

> 解決できない回答。 そうですねf(^-^; 失礼しました
ttyp03

2016/07/15 06:56

ごめんなさい。 マイナス評価するとここに投稿されるの知らなくて、なんか冷たい感じになってしまいました。
kutsulog

2016/07/15 07:06

あー、そうなんですね 私も知らなかったです 解決しない回答に+がついて 間違いが起こってもまずいのでしょうがないんでしょうね
guest

0

こんにちは。

手元のMinGW(gccのWindows版)では、期待通り動作しました。

念のため、func1.cfunc2.c#include <stdio.h>を追加しました。
しかし、これ無しでも期待通り動作します。

因みに結果は下記でした。

C:\xxx>test func1 func2

main()関数で直接printf()した時はちゃんと表示されますか?
また、OSとgccのバージョンは何でしょうか?

投稿2016/07/14 07:24

Chironian

総合スコア23272

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

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

cingyan

2016/07/15 05:11

OSは、Ubuntu 15.10 gccは、このように表示されました。 gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010 今まで、プログラムを打ってコンパイルして、 a.out というファイルを ./a.out と打って実行していたのを忘れていました。 お手数かけました。 ありがとうございました。
guest

0

こうしたらどうなります?

c

1extern void func1(); //本には書いてありませんが、warningが出るので足しました。 2extern void func2(); //同上 3

投稿2016/07/14 07:08

ttyp03

総合スコア16998

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

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

cingyan

2016/07/15 04:50

ご回答ありがとうございました。 ./test でできました。 私がうっかりしていたためです。 お手数かけました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問