函数C的未定义引用

时间:2013-01-28 07:48:37

标签: c unix header-files

我从here下载了一个库。我在我的程序中添加了头文件但是当我尝试访问此头文件的函数时,我收到错误:

undefined reference to the function for u_open() and u_accept()。我试图编译此头文件的.c文件,但我收到此错误:

undefined reference to main

我尽我所知来解决这个问题,但无法解决。这是程序。

#include "uici.h"
int main()
{
char client[50];
char buf[1024];

u_port_t portnumber;
portnumber=48625;

int fd = u_open(portnumber);

int communFd = u_accept(fd,client,50);

perror("Opened");

fprintf(stderr,"\nComun fd is %d\n\n\n",communFd);

read(communFd,buf,1024);

write(STDOUT_FILENO,buf,1024);

fprintf(stderr,"\n\nReading complete\n");
return 0;
}

我该怎么做才能解决这个问题?

此致

3 个答案:

答案 0 :(得分:1)

您的标头文件uici.h声明您在main()u_open()u_accept())中调用的函数,但不是它们在源文件中的实现。当链接器尝试创建整个程序时,它会抱怨无法找到实现。

解决方案是在创建实际的程序二进制文件时将所有文件链接在一起。使用g ++前端时,可以通过在命令行上同时指定所有源文件来完成此操作。例如:

g++ -o main main.c uici.c

将创建名为“main”的主程序,假设您需要的实现位于uici.c

修改:如果您要链接uici的预建库,则需要向前端指定需要链接库,例如:用:

g++ -o main main.c -luici

答案 1 :(得分:0)

使用gcc时需要链接库:

gcc nameofprgram.c -l<library>

答案 2 :(得分:0)

使用gcc编译时使用任何这些标志

-I <searchpath to include files>
-L <searchpath to the lib file>
-l<thelibname>

前:

  gcc -o myprogram -lfoo -L/home/me/foo/lib myprogram.c

这会将myprogram链接到文件夹/ home / me / foo / lib中的静态库libfoo.a