开发者

What's wrong in creating/using a shared library with gcc here?

开发者 https://www.devze.com 2023-03-21 03:45 出处:网络
In libname.h: int add_libname(int, int); In libname.c: #include开发者_JAVA百科 \"libname.h\" int add_libname(int a, int b)

In libname.h:

int add_libname(int, int);

In libname.c:

#include开发者_JAVA百科 "libname.h"

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

I can build the shared library this way:

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

But I can't use it in another programe test.c:

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

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

Reporting undefined reference to add_libname when I try to build it..

What's wrong here?


Because add_libname takes (int, int) you're giving it (1+5 = 6) or just (int)

I think you meant add_libname(1, 5);

Also to compile it correctly you must use gcc like so

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

the lib part of libname is ignored as it is implicit


To create a shared library use these

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

and now type these command,

    gcc -shared libname.so libname.o

libname.so ( the shared library is created with .so extension). To use the shared library

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

example if your c file is file.c and the header file libname.h is in c:\folder1\project and your libname.so (shared library) is in c:\folder\project2 then

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

this is the gcc command to be used while using the shared library.

Thank you.

0

精彩评论

暂无评论...
验证码 换一张
取 消