创建动态库,这是正确的路径吗?

创建动态库,这是正确的路径吗?

我正在尝试学习如何制作静态和动态库,但我对老师关于库的讲解有点不理解。我创建动态库的想法是这样的:

gcc -c main.c -o main.o
gcc -c -fPIC func.c -o func.o
gcc -shared -Wl,-soname,-libfunc.so.1 -o libfunc.so.1.0.1 func.o
ldconfig -n .
ln -sf libfunc.so.1.0.1 libfunc.so
gcc main.o libfunc.so.1.0.1 -o prog1
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

现在我的老师说倒数第二行必须是这样的:

gcc main.o -o prog1 -L. -lfunc

有人能解释一下这两者之间的确切区别吗?谢谢!

答案1

-l<name>只是一个快捷方式,说“在配置的库路径中查找lib<name>.so或”,并将当前目录添加到该路径。lib<name>.a-L.

当然,-l在使用真实库时是首选,因为这样不需要知道库的完整路径和各种操作系统详细信息(例如.sovs .dylibvs .avs .dll),但是在输出可执行文件时应该没有区别。

$ gcc -o out1 main.c libtest.so
$ gcc -o out2 main.c -L. -ltest
$ md5sum out*
b1b8f46bf6091377b202df90d6bd32cc  out1
b1b8f46bf6091377b202df90d6bd32cc  out2

有关和ld的详细描述,请参阅手册页。-l-L

相关内容