![](/img/trans.png)
[英]Is it necessary to use -l library option when using -c 'compile-only' option (and at what stage is fPIC option necessary)?
[英]GNU C : How can I compile a C program with dynamic library option -lmylib but without -L option
我已经使用了几个库,例如pthread
作为-lpthread
和math
作为-lmath
但是我不需要使用-L
选项来指定链接路径。
但,
mylib.c
编译为gcc -fPIC mylib.c -o libmylib.so
创建了一个库mylib
。 /usr/local/lib/libcustom
/etc/ld.so.conf.d/libcustom.conf
添加了/usr/local/lib/libcustom
/etc/ld.so.conf.d/libcustom.conf
ldconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/customlib
mylib
创建了一个名为function的sample.c
现在,当我编译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
? 在-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
因此,您需要将mylib放在链接器已知的路径中。 例如/ usr / lib或/ usr / local / lib之类的地方。 在您的情况下,它可与pthread
因为它已位于系统已知的路径中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.