c++ - 在带有 makefile 的 C++ 代码中使用 C 库

标签 c++ c makefile c-libraries

我有一个由 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.hmain.cpp 在同一目录中, 使用 #include "cluster.h" 或者你可以使用 -I. (告诉它在当前目录中)或 -I/address告诉编译器在哪里寻找你的标题

当你更正它时,你会得到第二个错误,我相信这是因为你的代码,我认为这是因为你在 main.cpp 中的代码,并且您的集群代码没有任何内容,我建议,尝试发布您的代码以找出问题所在

关于c++ - 在带有 makefile 的 C++ 代码中使用 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25387258/

相关文章:

C 持续集成

c++ - 为什么 constexpr 隐式转换并不总是有效?

c++ - 轴对齐矩形测试中的点?

linux - Linux内核编译时输出的CC、LD、CC[M]等代码是什么?

c - (std::size_t)&((Structure *)0)->last 做什么?

c - sysinfo 为 freeram 返回不正确的值(即使使用 mem_unit)

makefile - 将目录中的所有C文件编译为单独的程序

c++ - OpenCV C++膨胀运算符帮助

c++ - 无法在 C++ 中使用 Boost 和 Eureqa 编译程序

C++ Typedef 签名