我有头文件:
dictionary.h:
#ifndef dictionary_h__
#define dictionary_h__
extern char *BoyerMoore_positive(char *string, int strLength);
extern char *BoyerMoore_negative(char *string, int strLength);
extern char *BoyerMoore_skip(char *string, int strLength);
#endif
函数定义:dictionary.cpp
#include<stdio.h>
#include<string.h>
char *BoyerMoore_positive(char *string, int strLength)
{
} ---- //for each function
和主文件main.cpp:
#include "dictionary.h"
#pragma GCC diagnostic ignored "-Wwrite-strings"
using namespace std;
void *SocketHandler(void *);
int main(int argv, char **argc)
{
----
skp = BoyerMoore_skip(ch[i], strlen(ch[i]) );
if(skp != NULL)
{
i++;
printf("in\n");
continue;
}
printf("\n hi2 \n");
str = BoyerMoore_positive(ch[i], strlen(ch[i]) );
str2= BoyerMoore_negative(ch[i], strlen(ch[i]) );
----
}
当我执行main.cpp
时它给出了:
/tmp/ccNxb1ix.o: In function `SocketHandler(void*)':
LinServer.cpp:(.text+0x524): undefined reference to `BoyerMoore_skip(char*, int)'
LinServer.cpp:(.text+0x587): undefined reference to `BoyerMoore_positive(char*, int)'
LinServer.cpp:(.text+0x5bd): undefined reference to `BoyerMoore_negative(char*, int)'
collect2: error: ld returned 1 exit status
我不知道为什么它找不到这个功能! 帮助赞赏!
答案 0 :(得分:3)
您需要将两个源文件编译为main.o
和dictionary.o
,然后将这些目标文件链接到最终的可执行文件中:
$ g++ -c main.cpp
$ g++ -c dictionary.cpp
$ g++ -o myexe main.o dictionary.o
或者您可以一次性构建和链接:
$ g++ -o myexe main.cpp dictionary.cpp
您通常会创建一个Makefile
来解决这个过程中的苦差事,这可能与(未经测试)一样少:
myexe: main.o dictionary.o
然后它只是:
$ make
答案 1 :(得分:1)
您确定您的dictionary.cpp
已包含在您的项目中且构建正确吗?
链接器在编译后无法在对象文件中找到这些函数,请查看完整日志以了解编译错误或dictionary.cpp
文件是否成功。