内联函数Solaris(SunOS 5.9)的未定义符号错误

时间:2014-02-25 13:10:52

标签: c++ solaris cc

我在文件cpstr.c中定义了一个内联函数copy_string,并为cpstr.c文件创建了.so文件(libtest.so)。在尝试将此libtest.so链接到test.c时,我收到错误

ild: (undefined symbol) char*copy_string(char*,const char*) -- referenced in the text segment of test.o

当我从函数copy_string中删除内联时,它可以正常工作。

以下是我们尝试过的命令,

CC  -c  -xarch=v9  test.c

CC -G  -xarch=v9 -o libtest.so -Kpic cpstr.c

CC -xarch=v9   -g -o test  test.o  /myplace/libtest.so 

当我们尝试获取libtest.so的内容时,我在libtest.so文件中找不到copy_string名称。但是当我从copy_string函数中删除'inline'时,我可以在内容中看到它。

任何人都可以建议我使用解决方案摆脱未定义的符号错误而不删除内联函数。

test.c的

#include <stdio.h>
extern char  *copy_string (char *, const char*);
int main()
{
    char str[50];
    copy_string(str,"hello");
    printf("%s\n", str);
    return 0;
}

cpstr.c

#include<string.h>
inline char    *copy_string (char *str1, const char *str2)
{
     return (str2 ? strcpy (str1, str2) : (char *) 0); 
}

CC  -c  -xarch=v9  test.c
CC -G  -xarch=v9 -o libtest.so -Kpic cpstr.c

CC -xarch=v9   -g -o test  test.o  /space/systpe/devendra/dhsqlroot/libtest.so 
ild: (undefined symbol) char*copy_string(char*,const char*) -- referenced in the text segment of test.o

2 个答案:

答案 0 :(得分:0)

它希望您在头文件中实现内联函数

答案 1 :(得分:0)

函数说明符inline的函数应在每个使用它们的模块中定义。编译器需要查看其内联定义以正确生成目标代码。所以通常他们的定义都放在标题中。