У меня есть библиотека C, созданная cluster.h и cluster.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
Я попытался импортировать библиотеку 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: ошибка: ld возвращен 1 статус выхода make: * [обилиеbin] Ошибка 1'
Я также попытался скопировать часть кода, которая мне нужна из библиотеки C, в проект C++, но компилятор сообщает о многих таких ошибках:
error: invalid conversion from 'void* to 'int* [-fpermissive] vector = malloc(nnodes*sizeof(int));
Файлы библиотеки находятся в одной и той же папке файлов проекта. Может кто-нибудь помочь? спасибо
Если вы хотите добавить код, написанный на языке c, вы должны # включить его как:
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
Примечание. Это предполагает, что все находится в одном каталоге, поэтому будьте осторожны, чтобы указать пути, если нет.
Сообщите мне о каких-либо дополнительных ошибках.
<cluster.h>
к"cluster.h"
. (Кавычки вместо угловых скобок). Угловые скобки указывают компилятору искать в его собственном каталоге; кавычки говорят ему начинать поиск в той же директории, где находится ваш исходный файл.-I .
на ваши флаги компиляции (чтобы добавить текущий каталог в список искомых включаемых путей).