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" 不同的是,第二个告诉编译器首先在当前目录中搜索您的头文件,然后在主 c++ 库目录中搜索

你的错误:

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

是因为它找不到头文件,所以,如果cluster.h在同一目录中 main.cpp,使用#include "cluster.h" 或者你可以使用-I.(告诉它在当前目录中)或者-I/address告诉编译器在哪里寻找你的头文件

当你更正它时,你会得到第二个错误,我认为这是因为你的代码,我认为这是因为你的代码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 回答