本帖最后由 蓝蓝的天 于 2016-7-5 10:05 编辑
首先,我们来编译并生成一个动态库:
代码如下:
编译生成动态库与编译普通的可执行文件略有不同。
编译:
其中多了一个-shared选项,该选项用于指示gcc生成动态库。
然后再编写一个简单例子,来使用这个动态库,代码如下:
下面我们利用前面的动态库来生成最终的可执行文件
其中-l用于指示生成文件依赖的库,-L用于指示gcc在哪个目录中查找依赖的库文件。
让我们运行这个test_dlib看看结果如何:
为什么会报告出错,找不到这个libdlib.so呢?前面明明已经使用-L指定了库文件
在当前目录中,并且这个库文件也确实存在于当前目录中啊。这是怎么回事呢?
让我们使用ldd来查看test_lib的依赖库,如下:
确实显示无法找到libdlib.so。原因在于-L只是在gcc编译的过程中指示库的位置,
而在程序运行的时候,动态库的加载路径默认为/lib和/usr/lib。
我们现在将libdlib复制到/usr/lib目录下,再运行test_dlib试试。
现在./test_dlib顺利执行了,并成功调用了动态库中的dynamic_lib_call函数。
本帖最后由 蓝蓝的天 于 2016-7-5 10:05 编辑
首先,我们来编译并生成一个动态库:
代码如下:
编译生成动态库与编译普通的可执行文件略有不同。
编译:
其中多了一个-shared选项,该选项用于指示gcc生成动态库。
然后再编写一个简单例子,来使用这个动态库,代码如下:
下面我们利用前面的动态库来生成最终的可执行文件
其中-l用于指示生成文件依赖的库,-L用于指示gcc在哪个目录中查找依赖的库文件。
让我们运行这个test_dlib看看结果如何:
为什么会报告出错,找不到这个libdlib.so呢?前面明明已经使用-L指定了库文件
在当前目录中,并且这个库文件也确实存在于当前目录中啊。这是怎么回事呢?
让我们使用ldd来查看test_lib的依赖库,如下:
确实显示无法找到libdlib.so。原因在于-L只是在gcc编译的过程中指示库的位置,
而在程序运行的时候,动态库的加载路径默认为/lib和/usr/lib。
我们现在将libdlib复制到/usr/lib目录下,再运行test_dlib试试。
现在./test_dlib顺利执行了,并成功调用了动态库中的dynamic_lib_call函数。