我有一个由 cluster.h 和 cluster.c 制作的 C 库。我用 gcc -c cluster.c
编译了它.
我必须在 C++ 项目的主类中使用这个库的方法。这是我使用的生成文件:
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));
库文件与项目文件位于同一文件夹中。有人可以帮忙吗? 谢谢
最佳答案
如果你想添加一些用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
是因为找不到header,所以,如果cluster.h
与 main.cpp
在同一目录中, 使用 #include "cluster.h"
或者你可以使用 -I.
(告诉它在当前目录中)或 -I/address
告诉编译器在哪里寻找你的标题
当你更正它时,你会得到第二个错误,我相信这是因为你的代码,我认为这是因为你在 main.cpp
中的代码,并且您的集群代码没有任何内容,我建议,尝试发布您的代码以找出问题所在
关于c++ - 在带有 makefile 的 C++ 代码中使用 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25387258/