Я определил встроенную функцию copy_string в файле cpstr.c и создал файл .so (libtest.so) для файла cpstr.c. При попытке связать этот libtest.so для test.c, я получаю сообщение об ошибке
ild: (undefined symbol) char*copy_string(char*,const char*) -- referenced in the text segment of test.o
Когда я удалил inline из функции 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, я не смог найти copy_string
имя в файле libtest.so. Но я могу видеть это в содержании, когда я удалил «inline» из copy_string
функция
Может кто-нибудь, пожалуйста, предложите мне решение, чтобы избавиться от неопределенной ошибки символа без удаления встроенной функции.
#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;
}
#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
Он хочет, чтобы вы реализовали встроенную функцию в заголовочном файле
Функции со встроенным спецификатором функции должны быть определены в каждом модуле, где они используются. Компилятору нужно видеть свои встроенные определения, чтобы правильно генерировать объектный код. Поэтому обычно их определение помещается в заголовок.