首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编译时无法将".so“共享库链接到主".c”文件

在软件开发过程中,遇到编译时无法将“.so”共享库链接到主“.c”文件的问题,通常是由于链接器未能正确找到或使用共享库文件所致。以下是解决此问题的详细步骤和相关概念:

基础概念

  • 共享库(Shared Library):一种包含可由多个程序同时使用的代码和数据的库文件,通常以“.so”为扩展名,在Unix-like系统中使用。
  • 链接(Linking):编译过程的最后阶段,将目标文件与其他库文件组合起来,生成可执行文件。

解决步骤

1. 确认共享库的位置

确保共享库文件(“.so”文件)存在于系统中,并且编译器能够找到它。可以通过以下命令查找库文件:

代码语言:txt
复制
find / -name "libyourlibrary.so" 2>/dev/null

2. 设置库路径

在编译时,需要告诉链接器去哪里寻找共享库。可以通过以下几种方式设置库路径:

  • 使用-L选项指定库路径
  • 使用-L选项指定库路径
  • 其中/path/to/library是库文件所在的目录,-lyourlibrary中的“yourlibrary”是库的名称(不包括“lib”前缀和“.so”后缀)。
  • 设置环境变量LD_LIBRARY_PATH: 在运行程序之前,设置此环境变量可以让动态链接器知道在哪里查找共享库:
  • 设置环境变量LD_LIBRARY_PATH: 在运行程序之前,设置此环境变量可以让动态链接器知道在哪里查找共享库:

3. 检查库文件的依赖关系

有时共享库本身可能依赖于其他库。可以使用ldd命令检查库的依赖关系:

代码语言:txt
复制
ldd libyourlibrary.so

确保所有列出的依赖库都能被正确找到。

4. 确保库文件权限正确

检查共享库文件是否具有适当的读取权限:

代码语言:txt
复制
ls -l /path/to/library/libyourlibrary.so

权限应至少为r-xr-xr-x

示例代码

假设我们有一个简单的C程序main.c,想要链接到一个名为libexample.so的共享库:

main.c:

代码语言:txt
复制
#include <stdio.h>
#include "example.h"  // 假设库的头文件是example.h

int main() {
    print_hello();  // 假设库中有一个函数print_hello()
    return 0;
}

编译命令:

代码语言:txt
复制
gcc -o main main.c -L/path/to/library -lexample

设置环境变量(可选):

代码语言:txt
复制
export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH
./main

应用场景

共享库广泛应用于大型软件项目中,以实现代码复用和模块化设计。它们允许不同的应用程序共享相同的代码,从而节省磁盘空间并提高内存利用率。

可能遇到的问题及原因

  • 找不到库文件:通常是由于库文件路径未正确设置或库文件不存在。
  • 依赖库缺失:共享库可能依赖于其他库,若这些依赖库缺失或路径未设置,会导致链接失败。
  • 权限问题:库文件如果没有正确的读取权限,也会导致链接失败。

通过上述步骤和方法,通常可以解决编译时无法链接共享库的问题。如果问题依旧存在,建议检查编译器和链接器的详细输出信息,以便进一步诊断问题所在。

相关搜索:加载共享库时出错: libhdf5.so.101:无法打开共享目标文件加载共享库时出错: libPocoNet.so.60:无法打开共享对象文件:没有这样的文件或目录arm-linux-gnueabihf-g++交叉编译时出错。无法识别共享库文件./test:加载共享库时出错: libcpprest.so.2.8:无法打开共享目标文件:没有这样的文件或目录加载共享库时出错: libgtk-3.so.0:无法打开共享对象文件:没有这样的文件或目录rethinkdb:加载共享库时出错: libprotobuf.so.17:无法打开共享目标文件:没有这样的文件或目录加载共享库时出错: libpq.so.5:无法打开共享对象文件:运行rust app时没有这样的文件或目录../main:加载共享库时出错: libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或目录获取cp:加载共享库时出错: libc.so.6:无法打开共享目标文件:没有此类文件或目录错误ffmpeg:加载共享库时出错: libmp3lame.so.0:无法打开共享对象文件:没有这样的文件或目录节点:加载共享库时出错:libitui18n.so.62:无法打开共享对象文件:没有这样的文件或目录paraview:加载共享库时出错: libQt5Core.so.5:无法打开共享对象文件:没有这样的文件或目录QBS .../install-root/MyProject:加载共享库时出错: foobar.so:无法打开共享目标文件:没有这样的文件或目录加载共享库时出错: libX11.so.6:无法打开共享对象文件: linux docker容器中没有此类文件或目录加载共享库时出现Python错误: libpython3.5m.so.1.0:无法打开共享对象文件:没有这样的文件或目录mongosql无法在Red Hat 8上启动:“加载共享库时出错: libssl.so.10:无法打开共享目标文件:没有这样的文件或目录”如何解决;tesseract:加载共享库时出错: libpng12.so.0:无法打开共享对象文件:没有这样的文件或目录?正在获取“加载共享库时出错: libSDL2_mixer-2.0.so.0:无法打开共享目标文件:没有这样的文件或目录如何修复加载共享库时出现的错误:"libpython3.6m.so.1.0:无法打开共享对象文件:没有这样的文件或目录“?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【一站式解惑】Linux中.a、.so和.o文件以及-I,-L,LIBRARY_PATH,LD_LIBRARY_PATH等

本文由博主Vincent乐提供,主要介绍linux中的.o,.a,.so文件是什么,怎么生成,如何使用等内容,通俗易懂,示例丰富。...(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件(实际上也算是一个静态库,只是在链接时只能把函数在DLL的入口链接到exe中,而不像真正静态链接库那样将函数体真正链接到exe中 ,通过lib...在Linux下,共享库的加载是由/lib/ld.so完成的,ld.so加载共享库时,会从ld.so.cache查找。 创建函数库示例 我们通常把一些公用函数制作成函数库,供其它程序使用。...step2:将hello.c编译成.o文件 无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序hello.c通过gcc先编译成.o文件。...file or directory 从程序hello运行的结果中很容易知道,当静态库和动态库同名时,gcc命令将优先使用动态库,默认去链接/usr/lib和/lib等目录中的动态库,将文件libmyhello.so

5.5K52

error adding symbols: DSO missing from command line

这个错误意味着编译器无法解析某个共享对象库(DSO),并将其链接到你的程序中。本文将探讨导致此错误的可能原因,并提供解决方案。...检查库文件权限 如果库文件的权限设置不正确,编译器可能无法访问它,导致链接错误。请确保库文件具有正确的权限设置,并对编译器进程可执行。 5. 编译器参数顺序 编译器选项的顺序也可能导致此错误。...结论 “error adding symbols: DSO missing from command line”错误是由于编译器无法解析共享对象库并将其链接到你的程序中。...实际应用示例 假设我们有一个简单的C程序,包含一个源文件 main.c 和一个共享库文件 libmath.so,我们要将 libmath.so 链接到 main.c 中来执行一些数学计算。...DSO的特点 动态加载和链接: DSO在程序运行时动态加载和链接,它与静态库不同,静态库需要在编译时链接到可执行文件中。

3.5K10
  • Linux库详解

    库文件无法直接执行,因为它的源代码中没有入口主函数,而只是一些函数模块的定义和实现,所以无法直接执行。...实际开发中我们所编写的程序需要依赖很多基础的底层库,因此库的存在有很大的意义,避免每次编码都要从头开始 本质上库是可执行代码的二进制形式,这个文件可以在编译时由编译器直接链接到可执行程序中,也可以在运行时根据需要动态加载到内存中...Linux下编译源码时源文件经过编译生成.o的目标文件,.o的目标文件在链接阶段经过链接生成可执行程序。...为了避免程序每次启动都搜索一边,Linux系统对共享库采用了缓存管理之ldconfig工具,其默认读取/etc/ld.so.conf文件,对所有共享库按照一定规范建立符号连接,然后将信息写入/etc/ld.so.cache...共享库 动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入,因为可执行文件体积较小。

    2K40

    Ubuntu 12.04 + opencv 2.4.1 + Qt 4.8.3 + Qt creater 2.5.2 安装配置

    如果不是从主函数传参,则一般需要把图片文件放在.c文件同个目录下。注意程序中图片文件名不要写错。...\   /usr/local/lib/libopencv_calib3d.so include路径就不用解释了,按照共享库的命名惯例,每个共享库有三个文件名:real name、soname和linker...soname是一个符号链接的名字,只包含共享库的主版本号,主版本号一致即可保证库函数的接口一致,因此应用程序的.dynamic段只记录共享库的 soname,只要soname一致,这个共享库就可以用。...编译器会在这些 搜索路径以及-L 选项指定的路径中查找用 -l 选项指定的库,比如-lstack, 编译器会首先找有没有共享库libstack.so,如果有就链接它,如果没有就找有没有 静态库libstack.a...现代连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L 指定连接时库的路径,通过-R(或- rpath)指定程序运行时库的路径

    1.7K100

    Linux下动态库(.so)和静态库(.a) 的区别

    动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在 一  静态库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个...静态库的代码在编译时链接到应用程序中,因此编译时库文件必须存在,并且需要通过“-L”参数传递给编译器,应用程序在开始执行时,库函数代码将随程序一起调入进程内存段直到进程结束,其执行过程不需要原静态库存在...例如将libd2.so换成libd.so 显式调用动态库 显式调用动态库,编译时无需库文件,执行时动态可存储于任意位置,库里共享对象必须先申请后使用,不同动态库版本,只要其共享对象接口相同,就可以直接动态加载...总结: 编译静态库时先使用-c选项,再利用ar工具产生.编译动态库的方式依不同版本的UNXI而定。隐式调用动态库与静态库的用法相一致,而显示调用动态库则需要借助动态加载共享库函数族。...通过测试可以发现,当静态库和动态库同名时, gcc命令将优先使用动态库.为了确保使用的是静态库, 编译时可以加上 -static  选项,因此多第三方程序为了确保在没有相应动态库时运行正常,喜欢在编译最后应用程序时加入

    17.3K21

    一个简单例子教会你C++动态库的用法

    在 Linux 下使用 C++ 创建和使用动态库(通常是 .so 文件,即 Shared Object)包含几个关键步骤:创建动态库、编译、链接,以及在应用程序中使用这个库。...创建动态库 动态库是一种特殊的二进制文件,可以在运行时被一个或多个程序共享。为了创建一个动态库,你需要编写相应的 C++ 代码。...编译动态库 使用 g++(GNU C++ 编译器)来编译代码为动态库。使用 -fPIC(Position Independent Code)选项来生成与位置无关的代码,这是创建共享库所必需的。...使用 -shared 来创建共享库,并指定输出文件的名称(通常以 .so 结尾)。.../main 这告诉运行时链接器在当前目录中查找动态库。 注意事项 确保动态库在程序运行时可用,否则程序将无法启动。 动态库的版本和兼容性需要管理,因为它们可以被多个程序共享。

    88210

    在linux下制作静态库和动态链接库的方法

    它是多个.o文件的集合。Linux中静态库文件的后缀为"a"。 静态库的代码在编译时就已经链接到应用程序中 静态库中的各个成员(.o文件)没有特殊的存在格式,仅仅是一个.o文件的集合。...使用"ar"工具维护和管理静态库 ar的三个参数中:r代表将文件插入归档文件中,c代表建立归档文件,s代表若归档文件中包含了对象模式,可利用此参数建立备存文件的符号表。...,加上-lpthread可以链接到linux标准线程库 总结: 使用静态库可以使程序不依赖于任何其他库而独立运行,但是会占用很多内存空间以及磁盘空间, 而且如果库文件更新,则需重新编译源代码...–lmylib,连接器会为我们链接指定的静态库以及标准C的共享库。...-o libxxx.so 编译 gcc main.c -l xxx [-L 编译时库路径] 临时指定运行时的库查找路径 [LD_LIBRARY_PATH=(运行时库路径)] .

    3.2K20

    动态库与静态库优缺点比较分析_c静态库和动态库的区别

    b.o 共享库: 同静态库一样编译成目标文件:gcc –c a.c b.c 生成共享库:gcc –fPIC –shared –o libshared.so a.o b.o 由此可见静态库和动态库都是对目标文件的处理...另外,.一个程序编好后,有时需要做一些修改和优化,如果我们要修改的刚好是库函数的话,在接口不变的前提下,使用共享库的程序只需要将共享库重新编译就可以了,而使用静态库的程序则需要将静态库重新编译好后,将程序再重新编译一便...函数库分为静态库和动态库两种。 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。...动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在 1.什么是库 在windows平台和linux平台下都大量存在着库。...lib的名称,major是主版本号, minor是副版本号 6.如何知道一个可执行程序依赖哪些库 ldd命令可以查看一个可执行程序依赖的共享库, 例如# ldd /bin/lnlibc.so.6 =>

    3.2K20

    【Linux】基础IO --- 软硬链接、acm时间、动静态库制作、动静态链接、动静态库加载原理…

    三、动静态库的区别(链接阶段,链接结果,链接方式上的区别) 1. 静态库以.a为后缀,程序在编译链接阶段,将库的代码链接到可执行文件当中。...将库给对方的实际就是,把库文件(.a/.so)和与之匹配的头文件都给对方。...gcc -fPIC -c *.c ---生成.o文件 gcc -shared -o libmymath.so *.o ---将.o文件进行归档形成动态库 shared: 表示生成共享库格式 fPIC...在编译时,gcc知道了库文件的路径和名称,但是在程序运行时就和gcc没关系了,动态库是在程序运行期间进行加载的,而在运行期间,OS和shell不知道我们的库在哪里,因为我们的库不在系统路径下,所以OS无法找到...但是当我们下一次登录xshell时,环境变量中我们刚刚添加的路径会默认自动消失,所以在下一次登录时,mymath就又无法正常运行了,还会报找不到库文件的错误,如果想让路径永久生效,就需要改环境变量的配置文件

    3.7K30

    【Linux】动静态库(超详细)

    定义 动态库是编译后生成的共享对象文件,通常以 .so为后缀(如 libmylib.so)。这些库在程序运行时动态加载,多个程序可以共享同一个动态库。 2..../include 查询指定目录结果如下: 注意:即使我们将头文件和库文件拷贝到系统目录下,但是 gcc 在编译main.c时,还需要显式地说明要链接的库在哪一路径下。...,使用 make ouput 将头文件和库文件分门别类放在 stdc 的目录下 gcc 编译 main.c 链接库时,需要由以下三个选项定位文件: -I:指定头文件搜索路径。...ouput 将头文件和库文件分门别类放在 stdc 的目录下 gcc 编译 main.c 链接库时,需要由以下三个选项定位文件: -I:指定头文件搜索路径。...因此,只要将动态库的.so文件拷贝到系统目录下,这个可执行程序就可以被链接到动态库,而不需要重新编译链接。

    6400

    Linux编译工具:gcc入门

    预处理实际上是将头文件、宏进行展开。编译阶段,gcc调用不同语言的编译器,例如c语言调用编译器ccl。gcc实际上是个工具链,在编译程序的过程中调用不同的工具。汇编阶段,gcc调用汇编器进行汇编。...hello.c 或 gcc -c hello.c -o hello.o 编译生成可重定位目标文件 使用gcc时可以加上-Wall选项。...使用库的优点在于: 模块化的开发 可重用性 可维护性 库又可以分为静态库与动态库: 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。...默认库文件是在系统的目录下进行搜索。同样的,-I.选项用于头文件的搜索。 8. 生成共享库 生成一个共享库,名称的规则是libxxx.so。...将刚才hello.o生成libhello.so的命令为: gcc -shared -fPIC hello.o -o libhello.so 生成了共享库之后,可以这样来使用共享库: gcc -Wall

    4.8K50

    Linux的静态库和共享库详解及实例

    在Linux中静态库以.a为后缀,首先静态库的实现是在文件编译后的链接过程中就被载入到了程序中,那么后续的程序的运行使用就不会再依赖库,那么弊端就是将静态库载入到程序中会导致程序的体积变大,而且如果静态库后续进行了更新...首先我们先将这些函数文件编译为.o文件,需要加上-fPIC参数,表示让生成的.o文件与路径无关,这一点主要是用于共享库的操作,单纯只用静态库的话可以不加。 ?...主版本号的增加就说明了它是不兼容的,需要重新编译链接。...我们先在lib下建立一个linkname的软链接,然后再去编译main.cpp和共享库,其中-L参数后面跟你的共享库的所在目录,-l后面跟库的名称,因为我的库是libmytest.so,所以我的库的名称就是...这里虽然编译成功了,但是其实还是无法运行test,是因为系统找不到这个共享库的路径,可以通过ldd test来查看可执行文件的动态链接库 ?

    3.4K21

    CC++生态工具链——gccg++编译器使用指南

    创建静态库的时候,需要使用"gcc/g++ -c"先将xxx.c源文件编译为目标文件xxx.o,然后使用ar指令将xxx.o打包成xxxx.a静态库。...使用“gcc -shared -fPIC”可以直接用xxx.c源文件生成xxx.so动态库。 目标程序与动态库链接时,可执行文件仅包含它所需的一个小函数表,而不是来自库文件的完整机器代码。...正因为这种链接方式,共享库每次被更新时,都不需要重新编译正在使用共享库的目标程序。 使用-Wl,-Bdynamic告诉链接器优先使用动态库。...编译目标代码时指定的动态库搜索路径 2. gcc的环境变量LD_LIBRARY_PATH 3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径 4. 默认的动态库搜索路径/lib 5....path] #将头文件的路径添加到搜索的范围,路径为包含xxx.h/xxx.hpp文件的目录 -shared #生成共享库,库文件格式为xxx.dll/xxx.so/xxx.dlyb

    2.7K30

    linux下的 lib文件的学习思考

    Linux下的库文件分为共享库和静态库两大类,它们两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。 ...第三个特点文件名是.so的库为共享库(共享库是在运行的时候动态加载的 )。默认情况下,GCC在链接时优先使用共享库,只有当共享库不存在时才考虑使用静态库。 ...这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。...\n"); } 将这几个文件编译成一个动态库:libtest.so $ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 2、动态库的链接...l       将test.c与动态库libtest.so链接生成执行文件test: $ gcc test.c -L.

    2.7K20

    Go 静态编译及在构建 docker 镜像时的应用

    Go 语言具有跨平台和可移植的特点,同时还支持交叉编译,可以在一个系统上编译出运行在另一个系统上的二进制可执行文件,这是因为 Go 在编译时支持将依赖的库文件与源代码一起编译链接到二进制文件中,所以在实际运行时不再需要依赖运行环境中的库...第三种则是将标准函数的实现打包到一个标准函数目标文件中,例如 libx.o,开发者可以在编译时自行指定使用哪个标准函数目标文件。...链接库的两种类型 编译过程中编译器将源代码编译成目标文件,一般以 .o(object) 作为扩展名,之后链接器将多个目标文件链接成可执行文件或链接库文件,链接库根据被使用时的方式的不同分为静态链接库和动态链接库...C 语言的目标文件,之后再编译 Go 代码得到 Go 语言的目标文件,最终将 Go 和 C 目标文件通过链接器链接到一起得到最终的可执行文件。...通过关闭 CGO 间接实现静态编译 按照这个思路,如果关闭 CGO 之后再编译之前的 server.go 的应用代码,Go 编译器由于无法启用 CGO 也就无法生成 Go 和 C 之间的桥接代码,无法利用

    11610

    使用Zig在arm64上引导Uber的基础设施

    主机(host)是指编译二进制文件的机器。 目标平台(target)是指运行二进制文件的机器。 在进行原生编译时,主机和目标是相同的平台(即操作系统、处理器架构和共享库是相同的)。...例如,一块智能手表可以运行已编译的代码,但不能运行编译器,因此我们可以使用交叉编译器为手表编译程序。 sysroot 是目标平台文件系统的归档。例如,特定于目标平台的头文件、共享库、静态库。...通常是交叉编译工具链所必需的,下面将会讨论。 aarch64 或 arm64 是指处理器架构。 下图显示了如何通过原生编译(左)和交叉编译(右)将源文件 main.c 编译成可执行文件。...编译的、特定于目标架构的库: 动态链接器 /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1; C 库,共享对象:/usr/aarch64-linux-gnu...自 2023 年 1 月起,Zig 工具链可以将 Uber Go 代码库中的所有 C 和 C++ 代码编译到 Linux 目标平台。

    37330

    Linux共享库、静态库、动态库详解

    每个共享函数库都有一个真正的名字(“real name”),它是包含真正库函数代码的文件。真名有一个主版本号,和一个发行版本号。最后一个发行版本号是可选的,可以没有。...主版本号和发行版本号使你可以知道你到底是安装了什么版本的库函数。另外,还有一个名字是编译器编译的时候需要的函数库的名字,这个名字就是简单的soname名字,而不包含任何版本号信息。...ldconfig检查已经存在的库文件,然后创建soname的符号链接到真正的函数库,同时设置/etc/ld.so.cache这个缓冲文件。这个我们稍后再讨论。...那么用下面的命令来编译: gcc -o foo foo.c –ldl 共享库 共享库是程序启动时加载的库。...注意 - 如果用户在数组中使用它们,您可能无法展开结构。 对于C ++(以及支持编译模板和/或编译调度方法的其他语言),情况更加棘手。所有上述问题都适用,还有更多问题。

    8.9K11

    libpython3.7m.so.1.0: cannot open shared object file: No such file or directory

    这个错误信息说明在运行Python程序时,系统无法找到名为 libpython3.7m.so.1.0 的共享对象文件,或者这个文件不存在。...libpython3.7m.so.1.0 是Python解释器的主要共享库文件,用于执行Python程序。如果系统无法找到或访问到这个文件,那么将无法运行Python程序,并会抛出这个错误。...添加共享库路径如果你确定 libpython3.7m.so.1.0 文件存在于正确的路径下,但系统仍然无法找到它,那么可能是因为共享库路径没有正确配置。...请注意,为了编写和编译这个示例代码,你需要正确地配置C++编译环境,并将编译选项中的Python相关的库和头文件正确地链接到你的代码中。...共享库(也称为动态链接库)是一组预编译的可执行代码,其中包含了可被多个程序共享和重用的函数、类和变量。通过将这些代码放入共享库中,开发人员可以在多个程序中使用这些代码,从而实现代码的重用和共享。

    1.6K10

    库到底是个啥?为啥要链接,链接库的本质又是个啥?

    各步骤对应的gcc 命令(我们平时使用-o命令,是直接将所有步骤合在一起了) 不同步骤时产生的对应文件后缀 从上图我们可以知道,预处理、编译、汇编、链接生成的文件后缀分别是...) 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。...shared: 表示生成共享库格式 fPIC:产生位置无关码(position independent code) 库名规则:libxxx.so(生成动态库命令时,必须要前面的lib和后面的.so) [...o [root@localhost linux]# ls add.c add.h add.o libmymath.so main.c sub.c sub.h sub.o 三、库的使用 由于静态库是直接在编译链接的时候把库的代码链接到可执行文件中...但是静态库由于编译链接时不把库的代码链接到可执行文件中,而是在运行时,由操作系统从磁盘上的该动态库中复制到内存中(动态链接),所以除了我们在生成动态库告诉可执行文件库的存在,还需要告诉操作系统库的存在与路径

    48210

    【linux学习指南】Linux编译器 gcc和g++使用

    ,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用 ldd 命令用于显示一个可执行文件或共享库所依赖的共享库列表...libc.so.6: 这是标准 C 库(glibc)的共享库,提供了 C 语言的基本功能和系统调用接口。...函数库一般分为静态库和动态库两种。 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也 就不再需要库文件了。...动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。...它能够正确处理 C++ 的语法、特性和标准库。 默认链接 gcc:在编译 C 代码时,默认链接 C 标准库。

    20810
    领券