编译链接
The Goat
God of coding
展开
-
c++程序链接阶段:undefined reference to xxx function(未定义引用问题)原因解析
问题分析c++程序,在链接阶段,当你的程序引用了第三方库中定义的函数时(程序内部定义的函数不涉及这个问题,因为函数的实现已经在自己的代码段、数据段中了),连接器会在三方库中搜索当前符号表中未定义的符号(这些未定义的符号需要在三方库中定位到,否则就会出现对xxx函数未定义引用),当在三方库的符号表中找不到对应的符号时,就会报undefined reference to xxx function。注意,当遇到这个问题时,首先要排除是否三方库有没有被正确链接。当三方库没有被正确链接时,报的错误通常是“can原创 2020-06-28 11:52:34 · 4217 阅读 · 0 评论 -
c/c++依赖静态库、动态库符号问题
一些结论:liba.so / liba.a对应cppint subfunc(int a, int b) { return a + b; } int funcA(int a, int b) { return subfunc(a, b); }符号信息liba.so: func_sub, func_alibB.so / ...原创 2020-04-29 13:47:47 · 3609 阅读 · 1 评论 -
[转]符号表是啥?strip去符号去了啥?
Reference:符号表是啥?strip去符号去了啥?在程序编译成可执行文件后,这个文件中会有一个表专门来保存函数名,变量名,段名和代码或者数据的对应关系,这个表就是符号表。符号表在链接时起着按符号寻址的作用,但在运行的时候就没有什么作用了,因此这个表即使去掉之后,也并不会影响程序的运行。但是如果是动态链接的函数,比如用到了libc的printf函数,那么这个printf符号如果去掉了,在...原创 2020-04-15 10:48:30 · 1681 阅读 · 0 评论 -
linux 查看一个库文件/可执行文件是否是debug模式编译出来的
参考:https://stackoverflow.com/questions/1999654/how-can-i-tell-if-a-library-was-compiled-with-g通过man readelf,可以看到–debug-dump是用来打印debug节的信息的。实战了下,用gcc -g选项(并且不能strip)编译出来的库/exe,用这个命令可以打印出大量信息。而对于r...原创 2019-10-18 16:05:35 · 3129 阅读 · 0 评论 -
简述 LLVM 与 Clang 及其关系
"随着 Android P 的逐步应用,越来越多的客户要求编译库时用 libc++ 来代替 libstdc++。libc++ 和 libstdc++ 这两个库有关系呢?它们两个都是 C++ 标准库,libc++ 是针对 Clang 编译器特别重写的 C++ 标准库,而 libstdc++ 则是 GCC 的对应 C++ 标准库了。从 Android 市场来说,Android NDK 已在具体应用...原创 2019-07-31 11:33:17 · 125 阅读 · 0 评论 -
浅谈静态库和动态库
转自:https://zhuanlan.zhihu.com/p/71372182前言我们在编写代码的时候经常用到已有的接口,他们是以库的形式提供给我们使用的,而常见形式有两种,一种常以.a为后缀,为静态库;另一种以.so为后缀,为动态库。那么这两种库有什么区别呢?说明:本文主要说明Linux下的情况,windows不涉及。目标文件在解释静态库和动态库之前,需要简单了解一下什么是目标文件。...原创 2019-08-29 14:27:26 · 246 阅读 · 0 评论 -
yocto linux执行可执行文件报错:no such file or directory
在ubuntu 14.04中下载了yocto 1.7 x86-64的kernel/rootfs image,通过qemu启动虚拟机进入到yocto系统,在yocto中执行host机器(host机器也是x86_64)编译出的可执行文件时,遇到"no such file or directory错误"。在网络上搜罗了一下,遇到这种问题的人不少,绝大多数是在嵌入式系统中。例如:https://yoc...原创 2019-08-29 15:16:50 · 1054 阅读 · 0 评论 -
linux系统——ld-linux.so.X作用
转自:https://www.cnblogs.com/sun-frederick/p/4763460.html,重点部分我加粗了ld-linux.so查找共享库的顺序:Glibc安装的库中有一个为ld-linux.so.X,其中X为一个数字,在不同的平台上名字也会不同。可以用ldd查看:#ldd /bin/catlinux-gate.so.1 => (0x00bfe000)lib...原创 2019-08-29 15:22:46 · 4479 阅读 · 0 评论