1

我在文件 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 

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

谁能建议我一个解决方案来摆脱未定义的符号错误而不删除内联函数。

测试.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
4

2 回答 2

0

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

于 2014-02-25T13:18:16.220 回答
0

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

于 2014-02-25T13:18:53.587 回答