linux下动态库的编译
1 实践
test_cl.c:
1 #include<stdio.h>
2 #include <stddef.h>
3
4 extern int add(int a, int b);
5 #define LabelAddr
6 main()
7 {
8 int i = 0;
9 printf("hello world!\n");
10 printf("label_abc=%d\n", &&label_abc);
11 // i = &&label_abc;
12 // goto *i;
13 goto *(&&label_abc);
14 printf("after goto\n");
15 label_abc:
16 printf("label_abc\n");
17 i++;
18
19
20 printf("add(a+b) = %d\n", add(1, 2));
21 return 0;
22
23 }
test_so.c
1 int add(int a, int b)
2 {
3 return a + b;
4 }
test_so1.c
1 int add(int a, int b)
2 {
3 return a - b;
4 }
1、
gcc -c -fPIC test_so.c
生成test_so.o
2、
gcc -shared -fPIC -o libtest_so.so test_so.o
生成libtest_so.so
3、
(rm test_so.o)
gcc test_cl.c -L. -ltest_so
4、
export LD_LIBRARY_PATH=`pwd`
5、
./a.out
结果是add(a+b) = 3
6、
(rm libtest_so.so)
gcc -shared -fPIC -o libtest_so.so test_so1.c
7、
./a.out
结果是add(a+b) = -1
(如果动态库依赖于其他的动态库不存在,在链接成可执行文件时才会报错)
(优先链接动态库的,除非用-static参数指定链接静态库)
分享到:
相关推荐
在 centos 7 下使用 gcc 4.8.5 + cmake 3.16.9 编译,包含 bin, include, lib, lib64, share 五个目录,可以直接在 linux C++ 程序中引用。 因为 grpc 编译比较麻烦,且依赖项较多,故而分享一下编译后的版本,本人...
LINUX 下简单的编译和使用动态链接库 在 LINUX 下,编译和使用动态链接库是一项非常重要的技术。动态链接库,即 Shared Object(.so 文件),是将一些常用的代码,例如函数、类等,编译成一个独立的文件,供其他...
本篇文章将深入探讨如何在Linux下的Qt环境中创建和使用动态库。 首先,创建动态库涉及以下步骤: 1. **项目设置**:在Qt Creator中,新建一个Qt Console Application项目。选择“New File or Project” -> ...
6. **使用编译好的库**:在项目中使用编译的Boost库时,需要链接对应的动态库(如`-lboost_thread -lboost_system`)或者静态库,并确保库的路径被系统搜索路径(`LD_LIBRARY_PATH`或`DYLD_LIBRARY_PATH`)包含。...
总结,动态库和静态库在Linux下的编译和使用涉及的关键点包括`-fpic`、`-shared`、`-L`、`-l`、`ar`工具以及正确的文件命名规则。理解这些概念和操作对于Linux系统下的C/C++编程至关重要,能够帮助开发者更有效地...
Linux 下 g++ 编译与使用静态库和动态库 Linux 下 g++ 编译与使用静态库和动态库是 Linux 开发中一个非常重要的知识点。静态库(*.a)和动态库(*.so)是 Linux 下两种常用的库文件类型,了解它们的生成和使用方法...
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库(*.a)与动态库(*.so)的生成...
QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库.适用于多种平台,利用它可以很方便的将单个或多个文件打包为zip文件,且打包后的zip文件可以通过其它工具打开 测试环境: 国产操作系统 Deepin20、...
网上大多都是Windows下的QT MQTT编译安装方法,Linux下有些不同,此文件是关于UBuntu和ARM Linux下QT MQTT库的编译安装详细步骤 -------------------------------------------------------- Linux版本:UBuntu 16.04...
### VS2015动态库编译及调用 1. **创建动态库项目**: - 打开Visual Studio 2015,通过“文件”->“新建”->“项目”选择“Visual C++”下的“空项目”。 2. **配置为动态库**: - 右键点击项目,选择“属性”,...
1、TensorFlow C++ API的编译是线上使用TensorFlow C++ API调用预先训练好的模型完成预测项目的必经之路...2、Linux环境下编译TensorFlow C++ API生成的动态链接库:libtensorflow_cc.so,libtensorflow_framework.so。
描述中提到,这个压缩包可能包含了大量的.so动态链接库文件,这是Linux系统下的可执行文件,用于程序运行时加载所需的函数和数据。由于库的大小超过3GB,表明PCL包含了许多模块和功能。编译PCL库通常需要较长的时间...
"linux下动态库的建立和使用" Linux系统下动态库的建立和使用是非常重要的知识点。在Linux系统中,动态库是一种共享对象(Shared Object),以.so为后缀的文件。它们可以被多个程序共享,提高了系统的效率和灵活性...
通过压缩包中的"linux动态库及静态库的创建和使用"文件,你可以找到更具体的实践教程和示例代码,包括如何创建、链接和使用这两种类型的库,以及解决可能出现的问题。这些资料将帮助你深入理解和掌握Linux环境下的...
在Linux环境下,如果我们需要将TinyXML作为动态库来使用,以实现更灵活的部署和节省资源,本示例代码将指导你如何进行操作。 首先,确保你已经下载了TinyXML的源代码。在Linux系统中,动态库的构建通常涉及以下步骤...
### Linux下使用动态库小结 #### 一、基本概念 在Linux环境下,动态库是一种重要的资源管理方式,尤其在嵌入式Linux开发领域中具有广泛的应用价值。本文旨在介绍Linux下动态库的基础知识及其使用方法。 **1.1 ...
### 在Linux下生成动态库与静态库的知识点详解 ...通过上述步骤,我们可以看到在Linux下生成和使用动态库及静态库的具体方法。这对于开发跨平台应用、优化程序性能以及进行模块化设计等方面都具有重要意义。
【Linux下动态库研究及应用】 ...总的来说,理解和掌握Linux下的动态库是系统开发的关键技能之一,它涉及到编译链接、程序运行时动态加载和环境配置等多个层面,对于提升软件的灵活性和可维护性具有重要意义。
在Linux环境下使用。 既可以支撑QGIS在Linux环境下的编译工作,也可以进行proj的二次研发。 四、其他说明 在Linux环境下,基于Qt Creator进行编译的proj开源库。包含有头文件include、库文件so等,提供了Debug、...
### Linux静态库与动态库详解 #### 一、引言 在Linux环境下,库是一种重要的软件组件,用于封装一组相关的函数或数据结构,以便于在不同的应用程序之间共享代码。库通常分为两大类:静态库(static libraries)和...