2

この関数をインラインにして、Objective-cメソッドから呼び出すと、clang: error: linker command failed with exit code 1 (use -v to see invocation)

Vector addv(Vector v1, Vector v2) {// works
    return (Vector){v1.x + v2.x, v1.y + v2.y, v1.z + v2.z};
}

inline Vector addv(Vector v1, Vector v2) {// if I call this, does not build
    return (Vector){v1.x + v2.x, v1.y + v2.y, v1.z + v2.z};
}

なぜこれを行うのですか、それを修正するために何ができますか?

4

1 に答える 1

3

C99inlineは、リンカー シンボルが発行されることを保証しません。「インスタンス化」を 1 つのコンパイル単位 (つまり .c) に配置する必要があります。

したがって、inline.h ファイルの定義は次のとおりです。

inline Vector addv(Vector v1, Vector v2) {// if I call this, does not build
    return (Vector){v1.x + v2.x, v1.y + v2.y, v1.z + v2.z};
}

Vector addv(Vector v1, Vector v2);

1 つの .c ファイルでシンボルを生成します。

于 2012-04-14T17:26:59.573 に答える