我使用了几个库,例如 pthread
作为 -lpthread
和 math
作为 -lmath
但我需要不要使用 -L
选项来指定链接路径。
但是,
- 我通过编译我的程序
mylib.c
创建了一个库 mylib
gcc -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
的使用?
谢谢。
您正在寻找 LIBRARY_PATH
。
LD_LIBRARY_PATH
用于在运行时而非编译时加载动态库。
旁注:添加到现有环境变量时,请确保使用 $LD_LIBRARY_PATH
而不仅仅是 LD_LIBRARY_PATH
。否则,您将丢弃原始内容并放入文字文本 LD_LIBRARY_PATH
。
所以它应该从:
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/local/lib/customlib
到:
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib/customlib
我是一名优秀的程序员,十分优秀!