【发布时间】:2016-02-04 11:57:28
【问题描述】:
我已经使用了几个库,例如 pthread 作为 -lpthread 和 math 作为 -lmath 但我不需要使用 -L 选项来指定链接路径。
但是,
- 我通过编译我的程序
mylib.c创建了一个库mylibgcc -fPIC mylib.c -o libmylib.so - 把它放在
/usr/local/lib/libcustom - 在文件中添加了路径
/usr/local/lib/libcustom/etc/ld.so.conf.d/libcustom.conf - 运行
ldconfig - 运行
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/customlib - 创建了一个
sample.c,调用了mylib中的函数
现在,当我编译 sample.c 和 gcc -L /usr/local/lib/customlib -o sample.o -lmylib 时,它工作正常,而当我尝试 gcc sample.c -o sample.o -lmylib 时,它给出的 ld 错误为 /usr/bin/ld: cannot find -lmylib
我想知道为什么-L 标志在-lpthread 的情况下是可选的,而在-lmylib 的情况下是强制性的?在-lmylib的情况下如何跳过-L的使用?
谢谢。
【问题讨论】:
-
尝试“ldconfig -p | grep -i mylib”检查您的库是否存储在当前缓存中
-
因为系统(链接器)已经知道在哪里可以找到
libpthread,但不知道在哪里可以找到libmylib
标签: c gcc gnu ld dynamic-library