Что плохого в создании / использовании разделяемой библиотеки с gcc здесь? - PullRequest
2 голосов
/ 18 июля 2011

В libname.h:

int add_libname(int, int);

В libname.c:

#include "libname.h"

int add_libname(int a, int b)
{
  return a+b;
}

Я могу создать общую библиотеку следующим образом:

gcc -shared -fPIC libname.c -o libname.so

НоЯ не могу использовать его в другой программе test.c:

#include <stdio.h>
#include "libname.h"

int main(int argc, char* argv[])
{
  printf("%d\n", add_libname(1,5));
}

Отчет undefined reference to add_libname, когда я пытаюсь его построить ..

Что здесь не так?

Ответы [ 2 ]

3 голосов
/ 18 июля 2011

Поскольку add_libname принимает (int, int), вы даете его (1 + 5 = 6) или просто (int)

Я думаю, что вы имели в виду add_libname (1, 5);

Также для правильной компиляции вы должны использовать gcc следующим образом:

gcc -o myapp test.c -L. -lname

часть lib libname игнорируется, поскольку она неявна

1 голос
/ 18 июля 2011

Для создания общей библиотеки используйте эти

   gcc -fPIC -c libname.c 
   it gives warning: position independent code and libname.o file is generated.

и теперь введите эти команды,

    gcc -shared libname.so libname.o

libname.so (разделяемая библиотека создается с расширением .so). Чтобы использовать общую библиотеку

gcc -I/give the path of libname.h  sourcefile.c  /give the path of your .so file

пример, если ваш файл c является file.c, а заголовочный файл libname.h находится в c: \ folder1 \ project, а ваш libname.so (общая библиотека) находится в c: \ folder \ project2 тогда

gcc -I/cygdrive/c/folder1/project file.c /cygdrive/c/folder/project/libname.so

это команда gcc, которая будет использоваться при использовании общей библиотеки.

Спасибо.

...