繁体   English   中英

GNU C:如何使用动态库选项-lmylib但不使用-L选项来编译C程序

[英]GNU C : How can I compile a C program with dynamic library option -lmylib but without -L option

我已经使用了几个库,例如pthread作为-lpthreadmath作为-lmath但是我不需要使用-L选项来指定链接路径。

但,

  1. 我通过将程序mylib.c编译为gcc -fPIC mylib.c -o libmylib.so创建了一个库mylib
  2. 将其放在/usr/local/lib/libcustom
  3. 在文件/etc/ld.so.conf.d/libcustom.conf添加了/usr/local/lib/libcustom /etc/ld.so.conf.d/libcustom.conf
  4. 运行ldconfig
  5. 运行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/customlib
  6. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM