加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

使用共享库在Linux中编译C程序[复制]

发布时间:2020-12-14 01:02:12 所属栏目:Linux 来源:网络整理
导读:参见英文答案 linker tells me it can’t resolve symbols,but they’re there?????????????????????????????????????3个 我试图在Linux中使用共享库编译一个简单的C程序. 我在同一个文件夹中共同拥有以下文件: mymain.c #include "myclib.h" int main() {
参见英文答案 > linker tells me it can’t resolve symbols,but they’re there?????????????????????????????????????3个
我试图在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编译器收到错误消息:

*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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读