5

ファイルmain.cpp、factorial.cpp、hello.cpp、およびfunction.hを使用してMakefileを作成しようとしましたLinuxコマンドウィンドウで「make」と入力すると、次のように表示されます。

g++ -c -o hello main.o factorial.o hello.o
g++: main.o: linker input file unused because linking not done
g++: factorial.o: linker input file unused because linking not done
g++: hello.o: linker input file unused because linking not done

初めて Makefile を作成します。何が問題なのか提案してください。Makefile には次のコードが含まれています->

hello: main.o factorial.o hello.o
        g++ -c -o hello main.o factorial.o hello.o

main.o: main.cpp
        g++ -c -o main.o main.cpp

factorial.o: factorial.cpp
        g++ -c -o factorial.o factorial.cpp

hello.o: hello.cpp
        g++ -c -o hello.o hello.cpp

見たい場合の個々のファイルの内容は次のとおりです。1) main.cpp

#include<iostream>
#include"functions.h"
using namespace std;
int main()
{
    print_hello();
    cout << endl;
    cout << "The factorial of 5 is " << factorial(5) << endl;
    return 0;
}

2) こんにちは.cpp

#include<iostream>
#include "functions.h"
using namespace std;

void print_hello()
{
    cout << "Hello World!";
}

3) factorial.cpp

#include "functions.h"

int factorial(int n)
{
    if(n!=1)
    {
        return(n * factorial(n-1));
    }
    else return 1;
}

4) 関数.h

 void print_hello();  
 int factorial(int n);
4

4 に答える 4

3

その行にエラーがあります:

    g++ -c -o hello main.o factorial.o hello.o

男 gcc 言います:... the -c option says not to run the linker.

このオプションは、オブジェクト ファイルのみを生成するために使用されます。パスすると、gcc はリンカーを起動して実行可能ファイルまたは共有ライブラリを生成しません。

于 2013-08-12T05:49:40.027 に答える
2

上記のすべての回答から明らかなように、 in を使用-cg++ -c -o hello main.o factorial.o hello.oているため、リンクできません。対応する .cpp または .h などのファイルからオブジェクト ファイルを作成した後、これらをリンクする必要があります。リンクがなければ、各ファイルは何らかのタスクを実行できる完全なプログラムの一部であるため、これらのファイルは依存しているため、何も役に立ちません。したがって、完全なプログラムを実行するには、これらの依存部分をリンクする必要があります。

依存関係とパターン ルールの 2 つの方法で Makefile を作成する方法を簡単に学習できる基本的なビデオ チュートリアルの 1 つがここにあります。依存関係の方法の例を取り上げ、長い Makefile を作成するためのより良いアプローチとしてパターン ルールを導入します。


コンパイルとリンクの違いを知るには、このリンクが役立ちます。

于 2013-08-14T04:25:58.727 に答える