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 创建了一个库 mylib gcc -fPIC mylib.c -o libmylib.so
  2. 放在/usr/local/lib/libcustom
  3. 已将路径 /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. 创建了一个 sample.c 调用了 mylib
  7. 中的函数

现在,当我编译 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 的使用?

谢谢。

因此,您需要将 mylib 放置在链接器已知的路径中。例如 /usr/lib 或 /usr/local/lib 这样的地方。在您的情况下,它适用于 pthread 因为它已经位于系统已知路径中。

您正在寻找 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