0

cluster.h と cluster.c で作成された C ライブラリがあります。でコンパイルしましたgcc -c cluster.c

C++ プロジェクトのメイン クラスでこのライブラリのメソッドを使用する必要があります。これは私が使用するmakefileです:

abundancebin: main.o profileManager.o myHash.o myMalloc.o myStack.o myStringHash.o
    g++ -o abundancebin main.o profileManager.o myHash.o myMalloc.o myStack.o         myStringHash.o
main.o: main.cpp
    g++ -c main.cpp
profileManager.o: profileManager.cpp
    g++ -c profileManager.cpp
myHash.o: myHash.cpp
    g++ -c myHash.cpp
myMalloc.o: myMalloc.cpp
    g++ -c myMalloc.cpp
myStack.o: myStack.cpp
    g++ -c myStack.cpp
myStringHash.o: myStringHash.cpp
    g++ -c myStringHash.cpp

clean:
    -rm *.o abundancebin

他のインポートの後に使用して、main.cpp に C ライブラリをインポートしようとしました。

#ifdef __cplusplus
extern "C" {
#endif
#include <cluster.h>
#ifdef __cplusplus
}
#endif

しかし、私がコンパイルすると、makeこの応答があります:

main.cpp:29:21: fatal error: cluster.h: No such file or directory #include <cluster.h> ^ compilation terminated. make: *** [main.o] Error 1

代わりに「cluster.h」を使用すると、次のエラーが発生します。

main.o:main.cpp:(.text+0xf68): riferimento non definito a "kmedoids" main.o:main.cpp:(.text+0xf68): rilocazione adattata per troncamento: R_X86_64_PC32 contro il simbolo non definito "kmedoids" /usr/bin/ld: main.o: bad reloc address 0x18 in section.xdata' collect2: エラー: ld が 1 の終了ステータスを返しました make: * [abundancebin] エラー 1`

また、必要なコード部分を C ライブラリから C++ プロジェクトにコピーしようとしましたが、コンパイラは次のような多くのエラーを報告します。

error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive] vector = malloc(nnodes*sizeof(int));

ライブラリ ファイルは、プロジェクト ファイルと同じフォルダーにあります。誰か助けてくれませんか?ありがとうございました

4

2 に答える 2

3

C 言語で記述されたコードを追加する場合は、次のように #include する必要があります。

extern "C" {   
    #include "x264.h"
}

コンパイラに別の方法で処理するように指示し、コードを c++ に変更する必要はありません

1: コードを次のように追加します: 次の#include <cluster.h> ように変更することをお勧めします:#include "cluster.h" 異なるのは、2 つ目のコードは、最初に現在のディレクトリでヘッダーを検索し、次にメインの c++ ライブラリ ディレクトリでヘッダーを検索するようにコンパイラに指示することです。

あなたのエラー:

main.cpp:29:21: fatal error: cluster.h: No such file or directory

ヘッダーが見つからないため、cluster.hと同じディレクトリにある場合は main.cpp、使用する#include "cluster.h" か、使用できます-I.(現在のディレクトリにあることを伝えます)、または-I/addressヘッダーを探す場所をコンパイラに伝えます

それを修正すると、2 番目のエラーが表示されます。これは、コードが原因であると考えられます。コードが原因であると考えmain.cppられます。クラスター コードには何もありません。何が問題なのか

于 2014-08-20T06:16:29.227 に答える
-1

あなたの質問に答えるために、私はmakefileで次のようにアプローチします:

all: cfile.o
    g++ main.cpp -o app

cfile.o: cluster.c cluster.h
    gcc -c cluster.c

注: これは、すべてが同じディレクトリにあることを前提としているため、そうでない場合はパスを指定するように注意してください。

さらにエラーがあればお知らせください。

于 2014-08-19T16:41:37.697 に答える