我有一个由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
如果我使用&#34; cluster.h&#34;而不是我有这个错误:
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&#39。
collect2:错误:ld返回1退出状态
make: * [abundancebin]错误1`
我还尝试将我需要的代码部分从C库复制到C ++项目,但编译器报告了许多这样的错误:
error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]
vector = malloc(nnodes*sizeof(int));
库文件位于项目文件的同一文件夹中。有人可以帮忙吗? 谢谢
答案 0 :(得分: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
,而且你的群集代码没有任何内容,我建议,尝试发布您的代码,找出问题所在
答案 1 :(得分:-1)
在回答你的问题时,我会在makefile中接近这样的事情:
all: cfile.o
g++ main.cpp -o app
cfile.o: cluster.c cluster.h
gcc -c cluster.c
注意:这假设所有内容都在同一目录中,因此如果没有,请注意指定路径。
让我知道任何进一步的错误。