Linux编译的时候由于链接库出现的各种问题
一 动态库与机器位数不符合
报错内容:
/usr/bin/ld: skipping incompatible /usr/lib/libcrypto.so when searching for -lcrypto
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
此种情况就是libc.so以及libcrypto.so编译的时候是64位而本机器的位数为32位,或者相反情况,我遇到的情况是动态库是32位编译的,但是本机器是64位,所以需要连接的库应该连接到64位,这两个库都是系统库,在/usr/lib64/这个目录下就有现成的64位对应动态库,所以只要将Makefile里面的-L/usr/lib改成-L/usr/lib64就可以,非系统库的话就需要自己去找与自己机器匹配的位数对应的库
如果自己的机器是32位,但是只有64位的库,那么可以修改编译的参数,gcc编译的时候加上-m64:
gcc -m64 test.c (test会按照64位机器来进行编译)
二 找不到系统库
报错内容:
/usr/bin/ld: cannot find -lcrypto
1.定位库的位置:a.find / -name libcrypto*(需要root权限)b.locate crypto(无需root权限)
2.如果找到了/usr/local/lib/libcrypto.so.1
则做一个软连接(系统默认库路径:/usr/lib,/lib):ln -s /usr/local/lib/libcrypto.so.1 /usr/lib/libcrypto.so
三 找不到自定义库(非系统提供的库)
报错内容:
/usr/bin/ld:cannot find -lcomm
/usr/bin/ld:cannot find -lipc
找不到这两个库,这种情况基本上就是没有加上这两个库所在的路径,Makefile中加上-L/home/test/example/lib就可以(库在此目录下)
四 未定义的符号
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
