【发布时间】:2014-10-12 18:43:44
【问题描述】:
我有一个由 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));
库文件与项目文件位于同一文件夹中。有人可以帮忙吗? 谢谢
【问题讨论】:
-
尝试将
<cluster.h>更改为"cluster.h"。 (引号而不是尖括号)。尖括号告诉编译器在自己的目录中搜索;引号告诉它在源文件所在的同一目录中开始搜索。 -
或将
-I .添加到您的编译标志(将当前目录添加到搜索的包含路径列表中)。 -
改进您的
Makefile。参见例如this example -
invalid conversion from `void*` to `int`在 C 中有效,将导致此错误的代码放入extern "C"{} -
对不起,我不明白如何改进我的makefile作为例子
标签: c++ c makefile c-libraries