Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 向我解释这两个步骤,它们用于创建共享库_C_Linux_Shared Libraries - Fatal编程技术网

C 向我解释这两个步骤,它们用于创建共享库

C 向我解释这两个步骤,它们用于创建共享库,c,linux,shared-libraries,C,Linux,Shared Libraries,我完成了这些步骤并创建了共享库。 但这里我有一些问题 我想知道为什么我们要写4步和5步 我只知道这些步骤用于链接库 在第六步中,为什么我们只使用卢夫曼而不是利伯夫曼 步骤: 1 gcc -c -fPIC filebits.c -o filebits.o 2 gcc -shared -Wl,-soname,libhuff.so.1 -o libhuffman.so.1.0.1 filebits.o 3 mv libhuffman.so.1.0.1 /home/mydesktop/slib/ 4 l

我完成了这些步骤并创建了共享库。 但这里我有一些问题

我想知道为什么我们要写4步和5步

我只知道这些步骤用于链接库

在第六步中,为什么我们只使用卢夫曼而不是利伯夫曼

步骤:

1 gcc -c -fPIC filebits.c -o filebits.o
2 gcc -shared -Wl,-soname,libhuff.so.1 -o libhuffman.so.1.0.1 filebits.o
3 mv libhuffman.so.1.0.1 /home/mydesktop/slib/
4 ln -sf /home/mydesktop/slib/libhuffman.so.1.0.1  /home/mydesktop/slib/libhuffman.so
5 ln -sf /home/mydesktop/slib/libhuffman.so.1.0.1  /home/mydesktop/slib/libhuffman.so.1
6 gcc -o app app.c -lhuffman
7 ./app

请向我解释以下步骤

在构建库时,链接器选项错误:

-Wl,-soname,libhuff.so.1
应该是

-Wl,-soname,libhuffman.so.1
从:

-soname=名称 […]运行可执行文件时,动态链接器将尝试加载DT_SONAME字段指定的共享对象,而不是使用给定给链接器的文件名


构建库时,链接器选项错误:

-Wl,-soname,libhuff.so.1
应该是

-Wl,-soname,libhuffman.so.1
从:

-soname=名称 […]运行可执行文件时,动态链接器将尝试加载DT_SONAME字段指定的共享对象,而不是使用给定给链接器的文件名

在步骤4中,您将创建指向库名称的软链接,链接器将查找该库名称以进行链接。 在步骤5中,您将创建指向库的软链接,指示其主要版本。您无需遵循这些步骤,而是可以生成libhuffman.so作为第一步中的输出,这是链接器查找的内容。但遵循这一惯例,可以很容易地跟踪库的主要版本和次要版本。通常,库的名称为library\u name.MAJOR\u VERSION.MINOR\u VERSION。有一个以library\u name.MAJOR\u VERSION的形式的软链接&另一个只有library\u name的软链接。库名称的格式为lib[library\u name]。因此,这是使用-l选项时链接器所期望的格式。您可以检查Linux PC上的库,您将看到在许多情况下遵循此约定。这提供了一些有关这方面的细节

2.in 6th step why we use only lhuffman insted of libhuffman
希望这有帮助

在步骤4中,您将创建指向库名称的软链接,链接器将查找该库名称以进行链接。 在步骤5中,您将创建指向库的软链接,指示其主要版本。您无需遵循这些步骤,而是可以生成libhuffman.so作为第一步中的输出,这是链接器查找的内容。但遵循这一惯例,可以很容易地跟踪库的主要版本和次要版本。通常,库的名称为library\u name.MAJOR\u VERSION.MINOR\u VERSION。有一个以library\u name.MAJOR\u VERSION的形式的软链接&另一个只有library\u name的软链接。库名称的格式为lib[library\u name]。因此,这是使用-l选项时链接器所期望的格式。您可以检查Linux PC上的库,您将看到在许多情况下遵循此约定。这提供了一些有关这方面的细节

2.in 6th step why we use only lhuffman insted of libhuffman

希望这有帮助

对不起,我忘了这件事。。thanx抱歉我忘了这件事。。谢谢你