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

时间:2016-02-04 11:57:29

标签: c gcc gnu ld dynamic-library

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

但是,

  1. 我通过编译我的程序mylib创建了一个库mylib.c 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
  7. 中创建了一个名为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,在-L的情况下是强制性的?如果-lmylib

    ,如何跳过function has_specchar($x,$excludes=array()){ if (is_array($excludes)&&!empty($excludes)) { foreach ($excludes as $exclude) { $x=str_replace($exclude,'',$x); } } if (preg_match('/[^a-z0-9 ]+/i',$x)) { return true; } return false; } 的使用?

    感谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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