使用g前端执行链接时,例如:

g++ -o prog prog.o -Wl,-Bstatic -lcurl

g调用链接器,将其传递给您的链接选项,并且也进行静默

向链接器命令行添加了大量样板选项,这些选项

C链接不变.

例如,您的C程序很可能需要链接标准C库,

libstdc,但是您的g命令没有提及它.当然也需要标准的C库,

但也没有提及. g自动添加链接选项以链接这些和

其他图书馆.

您可以通过运行g查看添加到链接的所有样板

详细模式.您将看到类似的内容:

$g++ -v -o prog prog.o -Wl,-Bstatic -lcurl

...

...

COLLECT_GCC_OPTIONS='-v' '-o' 'prog' '-shared-libgcc' '-mtune=generic' '-march=x86-64'

/usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so \

-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper \

-plugin-opt=-fresolution=/tmp/cckwrJp6.res -plugin-opt=-pass-through=-lgcc_s \

-plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc \

-plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc \

--sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu \

--as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro \

-o prog /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o \

/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o \

/usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o \

-L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu \

-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu \

-L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib \

-L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. prog.o \

-Bstatic -lcurl -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc \

/usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o \

/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o

/usr/bin/x86_64-linux-gnu-ld: cannot find -lgcc_s

/usr/bin/x86_64-linux-gnu-ld: cannot find -lgcc_s

collect2: error: ld returned 1 exit status

特别注意您的-Bstatic选项和以下链接选项:

-Bstatic -lcurl -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc \

/usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o \

/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o

其中包括-lcurl和默认系统库:

-lcurl -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc

-Bstatic

Do not link against shared libraries. This is only meaningful on platforms for which shared libraries are supported.

The different variants of this option are for compatibility with various systems.

You may use this option multiple times on the command line: it affects library searching for -l options which follow it.

This option also implies –unresolved-symbols=report-all. This option can be used with -shared.

Doing so means that a shared library is being created but that all of the library’s external

references must be resolved by pulling in entries from static libraries.

[我的重点]

因此,您的-Bstatic选项可指示链接程序链接以下静态版本:

-lcurl -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc

它会找到您已安装的静态libcurl.a.找不到

-lgcc_s的静态库,因为没有安装任何libgcc_s.a

你的系统.您只有该版本和其他基本系统库的动态版本,

这很正常.

如果您希望链接器仅链接您所使用的-l选项的静态库

指定,那么必须在-l选项之前打开-Bstatic并将其关闭

在它们之后是-Bdynamic,即使这使-Bdynamic成为命令行中的最后一件事.

因为g(或任何其他GCC前端,gcc,gfortran …)将添加-l

后台命令行选项.链接类似:

g++ -o prog prog.o -Wl,-Bstatic -lcurl -Wl,-Bdynamic

解决此特定的链接错误.

linux静态链接库添加,c-静态链接库时,出现链接器错误:找不到-...相关推荐

  1. 解决 Angular 官网下载的库 Schematics 执行 npm run build 时遇到的编译错误

    我在 Angular 官网下载的 library Schematics 例子,运行命令行 npm run build 时,遇到如下错误: npm run build my-lib@0.0.1 buil ...

  2. 头文件和库文件区别,动态库和静态库的区别,动静态库的生成

    文章目录 一.什么是头文件?什么是库文件?有什么区别? 先说总结 目标文件 二.什么是静态库?什么是动态库?有什么区别? 三.为什么只用在程序头部写上包含的头文件,头文件中并没有实现内容就可以使用声明 ...

  3. 微信公众号大转盘抽奖活动链接怎么添加

    很多微信公众号都会有抽奖活动,想要给自己的公众号添加大转盘抽奖活动的链接,希望可以帮助大家在微信公众号中举办起抽奖活动,活跃起自己的粉丝,该怎么添加呢?下面我们就来看看详细的教程. 微信公众号大转盘抽 ...

  4. cmake使用教程(五)调用opencv外部库和自己生成的库

    这一节是我真正使用时遇到的,就是我需要构建动态库,但是这个动态库依赖外部的一些库如opencv.matlab等,那么若何构建这样的动态库呢?构建好如何测试呢?本篇将详细介绍其过程: 1.ubuntu安 ...

  5. cmake中添加引用动态链接_CMake 添加头文件目录,链接动态、静态库(添加子文件夹)...

    CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...

  6. linux 生成和使用动态链接库和静态链接库的Makefile编写

    引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...

  7. 程序员的自我修养--链接、装载与库笔记:静态链接

    1. 空间与地址分配 对于链接器来说,整个链接过程中,它就是将几个输入目标文件加工后合并成一个输出文件.测试代码a.c和b.c内容如下: // a.c extern int shared;int ma ...

  8. 静态库调用_静态链接和动态链接对比简析

    0. 简介 在Linux环境下进行开发工作,代码要经过编译链接生成二进制可执行文件,才能被CPU识别并执行:程序的编译过程可以参考另外一篇文章<linux程序编译过程简析>:链接过程分为两 ...

  9. 【Android FFMPEG 开发】Android Studio 中配置 FFMPEG 库注意事项 ( 静态库 链接 libz.so 库 | 导入 FFMPEG 函数库顺序 )

    文章目录 I . 导入 z 库 ( FFMPEG 动态库 与 静态库区别 ) II . FFMPEG 库引入顺序 III . Android Studio 中 FFMPEG 静态库引入完整 CMake ...

最新文章

  1. jsp+mysql开发论坛程序
  2. 检索数据_18_按照多个字段排序查询结果
  3. 议rman的crosscheck和obsolete
  4. Flask 快速上手
  5. 微信小程序map作为子组件wx.createMapContext失效
  6. Nodejs 中的Get、Post
  7. 新风格高端大气站长素材资源下载站源码 织梦dedecms内核(带手机版)
  8. Map(String ArrayList(Student))相关操作和遍历和利用Map(k v)统计字母出现次数
  9. 2021年第一篇原创——Spring核心初探~
  10. 去除DataTable重复数据的三种方法(转)
  11. NetCore3.1开发后台管理系统框架思路与实现
  12. 调用webservice服务方式总结
  13. web3(httpd2.4)
  14. C++:从入门到放弃[2]变量和读入
  15. 游戏安全初学者学习资料
  16. 匿名函数 和 拉姆达表达式
  17. 点评阿里云盛大云代表的云计算IaaS产业---中国云计算
  18. 计算机类SCI与EI收录的外文期刊
  19. Python实现利用MMR提取自动摘要
  20. MySQL_day2笔记

热门文章

  1. tensorflow运行mnist例程第99次迭代cuda出错
  2. html字符串导出word
  3. hbw-utils - guava基本数据类型工具类常用方法的整理
  4. 副校长仇旻解密神秘的西湖大学 AI布局有何不同
  5. oracle asmb关闭,[Oracle 11g r2(11.2.0.4.0)]集群守护进程CSS资源管理
  6. 【mysql表数据的大小】关于MySQL 查询表数据大小的总结
  7. 基于Visual Graph快速开发出电力系统
  8. 【BZOJ2844】albus就是要第一个出场 线性基 高斯消元
  9. 量化感知训练_《量化健身 动作精讲》:专业解读健身动作的秘密
  10. 92.【SpringCloud NetFilx】