У меня есть библиотека C, созданная cluster.h и cluster.c. Я собрал это с gcc -c cluster.c
,
Я должен использовать метод этой библиотеки в главном классе проекта C ++. Это make-файл, который я использую:
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
Я попытался импортировать библиотеку C в main.cpp, используя после других импортов:
#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: error: ld вернул 1 состояние выхода
делать: * [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
потому что он не может найти заголовок, так что если cluster.h
находится в том же каталоге, что и main.cpp
использовать #include "cluster.h"
или вы можете использовать -I.
(которые говорят его в текущем каталоге) или -I/address
сообщить компилятору, где искать заголовок
когда вы исправляете это, вы получаете вторую ошибку, которая, по-моему, из-за вашего кода, и я думаю, что из-за вашего кода в main.cpp
, и не иметь ничего с вашим кодом кластера, я предлагаю, попробуйте опубликовать свой код, чтобы выяснить, в чем проблема
В ответ на ваш вопрос я хотел бы подойти примерно так в make-файле:
all: cfile.o
g++ main.cpp -o app
cfile.o: cluster.c cluster.h
gcc -c cluster.c
Примечание. Предполагается, что все находится в одном каталоге, поэтому позаботьтесь о том, чтобы указать пути, если нет.
Дайте мне знать о любых дальнейших ошибках.