使用g++编译共享库后链接失败:ld无法找到-llibfuncs
链接共享库报错的解决方法
错误原因
GCC链接器的-l选项有固定规则:当使用-l<库名>时,链接器会自动在库名前加上lib前缀,再加上.so(共享库)或.a(静态库)后缀去查找文件。你写了-llibfuncs,链接器会尝试寻找liblibfuncs.so,而你实际生成的库是libfuncs.so,自然找不到。
正确的编译链接命令
把-llibfuncs改为-lfuncs,同时建议将输出文件名从main.o改为main(main.o通常指编译生成的目标文件,可执行文件一般不用这个后缀):
g++ main.cpp -L. -lfuncs -o main
运行时注意事项
运行生成的可执行文件时,系统可能找不到当前目录下的共享库,可通过以下方式解决:
- 临时设置环境变量:
export LD_LIBRARY_PATH=. ./main
- 或者编译时直接指定运行时库路径(推荐),这样无需每次手动设置环境变量:
g++ main.cpp -L. -lfuncs -Wl,-rpath=. -o main
内容的提问来源于stack exchange,提问作者FourierFlux
相关产品推荐
相关产品推荐

