GNU C:如何编译带有动态库选项 -lmylib 但没有 -L 选项的 C 程序
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
创建了一个库 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
的使用?
谢谢。
因此,您需要将 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
我使用了几个库,例如 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
的使用?
谢谢。
因此,您需要将 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