问题:Linux动态库连接后依然报错函数未定义
Date:2020_10_14
Environment:Linux
Language:C
问题详述
首先,我有一个main.c
文件,该文件调用了头文件head.c
里的第三个函数void thridFunc(SPECType para)
,head.c
里的三个函数通过两个源代码文件定义,并通过如下命令创建动态库:
g++ fist.c second.c -fPIC -shared -o libDynamic.so
这一步并无报错!
接下来通过如下命令链接动态库:
g++ -g -o main.out main.c -lDynamic.so -L. -Wl,-rpath=.
此步报错 thridFunc
未定义
接下来通过如下命令检查动态库中函数是否存在:
readelf -s libDynamic.so
确实存在
问题根源
头文件中声明thridFunc(SPECType para)
时,SPECType
类型所需头文件未包含。
解题思路
如果单纯是代码层面的问题,vsode常常是红色的错误信息。而未定义或未包含错误,应该是灰色的。(经验之谈而已,并未进行验证)