学校(湘大)要求做Linux实验,实验一是掌握安装Linux虚拟机,我安装的是VMware Workstation16
实验二则是创建静态库和动态库并使用,静态库没啥好说的一步步来就行,但是动态库的指令细节不对就会遇到很多麻烦
1、权限不够问题
这个问题最好解决,直接
$ su root
然后输入密码就可以了
2、warning:implicit declaration of function '函数名' [-Wimplicit-function-declaration]
这个问题是相关函数的头文件出错了,检查一下头文件吧
3、gcc main.c -o test出错
这个属于是直接都没链接动态库,不报错才怪了
4、/usr/bin/ld:找不到-lxxxx
collect2:error:ld returned 1 exit status
这个问题可能有两个原因:
- 你打包编译文件生成的.so文件没有发送到/usr/lib文件下,所以链接检索的时候找不到;
你只需要cp一下就好了:
cp libxxxx.so /usr/lib
- 另一个问题,gcc指令连接动态库的地址错了;
你检查一下你的gcc指令.L<路径>
路径一定要正确
5、最烦人也是最容易出现的问题:undefined reference to '函数名'
- 第一检查头文件有没有定义——定义了
- 第二检查main.c文件里有没有忘记引用动态库函数头文件——引用了
- 但是还是出错
重点来了
你的gcc指令真的写对了吗?
gcc .c文件 -o 想要生成的项目文件名 -L./(这个的意思是动态库在当前目录) -l动态库名
管你们老师是怎么教的,也不用去看网上的代码,只要你前面的步骤没出问题,按照这个模板来一定没错!!
这个指令的各个部分是可以换来换去的,所以版本不一样很正常,但是这个模板一定没错
我最后成功的指令是:
gcc main.c -o main.out -L./ -lIOSort
还有问题可以评论区问我,我以后遇到问题也会更新!
------------------------------------------------------------------------------------------