使用共享库在Linux中编译C程序

时间:2015-04-20 12:40:50

标签: c linux gcc shared-libraries

我正在尝试使用共享库在Linux中编译一个简单的C程序。

我在同一文件夹中将以下文件放在一起:

mymain.c

 #include "myclib.h"
 int main() {
   func();
   return 0;
}

myclib.h

 void func();

myclib.c

#include <stdio.h>
void func() {

   printf("hello world!!!!!!!!!!!!\n");

} 

然后我按照以下步骤操作:

  • gcc -c fPIC myclib.c(创建memoryaddress independent objectfile)

    产生:myclib.o

  • gcc -shared -fPIC -o libmyclib.so myclib.o(创建共享库)

  • gcc -c mymain.c(从main.c创建一个目标文件)

到目前为止一直很好 - 然后我准备好以下文件:

  • main.o
  • libmyclib.so

所以我尝试用这种语法创建一个程序:

gcc -o program -lmyclib -L. mymain.o

(我猜libmyclib的前缀lib应该替换为l?)

但是我收到了来自gc-compiler的错误消息:

 *mymain.o: In function `main':
 mymain.c:(.text+0xa): undefined reference to `func'
 collect2: error: ld returned 1 exit status*

我也测试过这种语法:

gcc -o program mymain.c -L -lmyclib -Wl,-rpath,.

然后我收到以下错误:

 /usr/bin/ld: cannot find -lmyclib.so
 collect2: error: ld returned 1 exit status

我在这两个实现中做错了什么? 如何使用共享库将此程序编译为可执行文件?

1 个答案:

答案 0 :(得分:5)

您需要在链接器调用命令行的末尾放置-l选项:

gcc -o program -L. mymain.o -lmyclib