linux编译动态库未定义,GCC链接库的一个坑:动态库存在却提示未定义动态库的函数...

当在GCC中编译时遇到动态库函数未定义的问题,可能是因为-l选项的位置不当。GCC按从左到右的顺序处理输入文件,如果-l放在源文件前,可能导致找不到库中的函数。解决办法是将-l放在源文件之后,如`gcc -o test -L. test.c -lmylib`。GCC链接器会按顺序尝试解决未定义的符号,一旦找到就不再回溯,这可能导致某些情况下找不到所需的库函数。
摘要由CSDN通过智能技术生成

背景

在GCC中已经指定链接库,然而编译时却提示动态库函数未定义!

测试出现的错误提示如下:

[GMPY@13:48 tmp]$gcc -o test -L. -lmylib test.c

/tmp/ccysQZI3.o:在函数‘main’中:

test.c:(.text+0x1a):对‘func_lib’未定义的引用

collect2: error: ld returned 1 exit status

而在测试用的动态库libmylib.so中是有定义函数func_lib的

[GMPY@13:55 tmp]$cat mylib.c

#include

int func_lib(void)

{

printf("In share library\n");

return 0;

}

[GMPY@13:56 tmp]$gcc -fPIC -shared mylib.c -o libmylib.so

GCC的链接坑

此处的"坑"指对不熟悉GCC机制的童鞋而言,会出现无法理解的不符合预期的效果

在用gcc编译时,我们可以用-L指定链接库位置,用-l指定。

man gcc查询时,我发现这么一段描述:

-llibrary

-l library

... ## 这里为了方便阅读,对原文进行了换行排版优化

It makes a difference where in the command you write this option;

the link

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值