1

我有头文件:

字典.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

我不知道为什么它找不到功能!帮助表示赞赏!

4

2 回答 2

3

您需要将两个源文件编译成main.odictionary.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
于 2013-08-18T07:49:08.293 回答
1

您确定dictionary.cpp您的项目包含在您的项目中并且构建时没有错误吗?链接器在编译后无法在目标文件中找到这些函数,请查看完整日志以了解编译错误或dictionary.cpp文件是否成功。

于 2013-08-18T07:43:08.500 回答