gcc链接,去掉不用的函数和data】的更多相关文章

编译代码的时候,没有用到的函数经常会被编译,该怎么才能去掉呢? 解决方法: CFLAGS 加上 -ffunction-sections -fdata-sections LDFLAGS 加上 --gc-sections 原理如下: -function-sections的意思是,将不同函数编译到不同的section上面.如果没有这个选项,所有的函数都会编译到一个section上面,于是函数就不能被“剥离”. -fdata-sections同理. --gc-sections 表示把不要的函数secti…
背景 在GCC中已经指定链接库,然而编译时却提示动态库函数未定义! 测试出现的错误提示如下: [GMPY@13:48 tmp]$gcc -o test -L. -lmylib test.c /tmp/ccysQZI3.o:在函数'main'中: test.c:(.text+0x1a):对'func_lib'未定义的引用 collect2: error: ld returned 1 exit status 而在测试用的动态库libmylib.so中是有定义函数func_lib的 [GMPY@13:…
Qt Windows下链接子系统与入口函数(终结版) 转载自:http://blog.csdn.net/dbzhang800/article/details/6358996 能力所限,本讨论仅局限于MSVC的cl编译器和MinGW的gcc编译器. 第一部分:不涉及Qt(理清链接子系统和入口函数) 第二部分:Qt的链接子系统和入口函数(与第一部分完全对应上) 第三部分:QtTest模块出现控制台的原因与方案 第四部分:Graeme Gill 给出的很有意思的代码. 再探 链接子系统 在  浅谈Co…
转自:http://blog.csdn.net/jasonchen_gbd/article/details/44044899 版权声明:本文为博主原创文章,转载请附上原博链接. GCC Function instrumentation机制可以用来跟踪函数的调用关系,在gcc中对应的选项为“-finstrument-functions”.可查看gcc的man page来获取更详细信息.编译时如果为gcc加上“-finstrument-functions”选项,那在每个函数的入口和出口处会各增加一个…
昨天在自己的CentOs7.1上写makefile的时候,发现在一个C程序在编译并链接一个已生成好的lib动态库的时候出错.链接命令大概是这样的: [root@typecodes tcpmsg]# gcc -o hello main.c -lmyhello /usr/bin/ld: cannot find -lmyhello collect2: error: ld returned 1 exit status 1 gcc链接动态库时的搜索路径 自以为在当前工程中设置好了环境变量 LD_LIBRA…
使用c++开发程序或者库时,将库提供给其他人使用. 然而使用者是使用c开发的程序,链接g++编译生成的库时,于链接gcc生成的库,有所不同. 首先是静态库,以链接g++编译生成的libmylib.a为例子 mylib依赖于pthread,rt,math库,链接时必须放在mylib之后. 同时-Wl,--no-as-needed -ldl添加在末尾是必须的. arm和x86有些不同,就是arm的gcc不会自动链接数学库math,需要手动添加链接. CC=arm-linux-gnueabihf-gc…
DLL的显式链接在某些时候比隐式链接具有更大的灵活性.比如,如果在运行时发现DLL无法找到,程序可以显示一个错误信息并能继续运行.当你想为你的程序提供插件服务时,显式链接也很有用处. 显式链接到全局C/C++函数非常简单.假设你想调用DLL中的一个函数ExportedFn,你可以像这样很简单地导出它: extern "C" _declspec(dllexport)void ExportedFn(int Param1, char* param2); 必须使用extern "C&…
main.c ; int main() { ; } int add() { ; } main.o 反汇编可以看到多了.text节的反汇编,存储的是全局变量的初始化数值 main.o对比,text段后面多了00 00 00 01,这是data段,文件偏移为0x5c 节头表的data节,偏移为5c,大小为4 symbol table多了test,节头表索引为2,即data节,数值为0(猜测该数值为地址,一会通过elf文件求证) main.elf data节大小变为4,bss仍然没有 程序头的项目2的…
库文件依赖顺序 GCC在链接时对依赖库的顺序是敏感的,被依赖的库必须放在后面,比如liba.a依赖libb.a,必须写成liba.a libb.a,否则链接将出错.在库比较多依赖关系比较复杂或者相互依赖或者自己不清楚的情况下,可以使用下面的选项来强制GCC重复查找依赖库: g++ -o tt tt.o -Xlinker "-(" -lws2_32 -lclsocketd -Xlinker "-)" 强符号和弱符号 在链接中,如果多个目标文件中含有相同名字的全局符号的…
gcc编译选项可以设置生成调试信息, debug信息格式有stabs,coff,xcoff,dwarf. 常用的有两种格式,stab和dwarf,stab较早,dwarf较新.两种格式介绍:https://www.ibm.com/developerworks/cn/opensource/os-debugging/ 单独-g可以生成只有gdb能识别的额外辅助信息,如果不想生成这些辅助信息,可以使用-gstabs等选项,只生成stabs调试信息,不生成额外辅助信息. 调试选项-g和优化选项-O一起使…
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). 目录 示例代码 sub.o 文件内容分析 段信息 符号表信息 main.o 文件分析 段信息 符号表信息 绝对寻址 相对寻址 重定位表信息 可执行程序 main 段信息 符号表信息 绝对地址重定位 相对地址重定位 总结 别人的经验,我们的阶梯! 最近因为项目上的需要,利用动态链接库来实现一个插件系…
关于static函数的用法 就像我们熟知的那样,变量可以分全局的和局部的,函数也可以分全局的和局部的. 比如说,在一个工程的common.h中定义了一个全局变量 int test;那么在整个工程的作用范围内,该变量都是存在的,在编译的时候会将其保存在整个工程全局的变量表中,文件(.h或.cpp)只要使用声明extern int test;就可使用该变量,而不用包含该变量的头文件common.h,因为该变量的作用域是全局的. 和全局变量一样,大多数的非类成员函数基本上都定义为全局的.我们可以分两种…
// a.h extern void foo(); // a.cpp #include <stdio.h> void foo() { printf("foo\n"); } // x.cpp #include "a.h" int main() { foo(); return 0; } // Makefile all: x x: x.cpp liba.so g++ -g -o $@ $^ liba.so: liba.a g++ -g -fPIC -share…
使用帮助函数创建链接 MVC提供一些帮助函数创建链接,这些函数根据路径映射表自动调整生成的URL: 说明 示例 输出结果 应用程序相对URL Url.Content("~/Content/Site.css")  /Content/Site.css 到控制器action的链接 Html.ActionLink("My Link", "Index", "Home") <a href="/">My Li…
GCC或G++在编译链接时,如果命令行中含有库,则要特别注意了.根据<C专家编程>5.3节中的提示,GCC在链接时对命令行时的处理顺序是从左到右.证据是GCC的MAN: -l library Search the library named library when linking. (The second alter- native with the library as a separate argument is only for POSIX compliance and is not…
今天在做项目的过程中,突然发现了一个有趣的问题,那就是我在Java服务器端写程序,String result = "0";然后通过out.println(result),将result值写入到Ajax回调函数的参数data中去,返现无论这个result定义为String,还是int,在前台function(data)中,这个data都是int类行的,也就是说如果你用data=="0"这句话测试,返回的是false!只有data==0,才是返回true! 一步一个脚印…
事件绑定: <html> <head> <title>angularJS入门小demo-5 事件指令</title> <script src="angular.min.js"></script> <script> //建立模块 var app = angular.module("myApp",[]); //然后通过模块来创建控制器 app.controller("myCon…
标准命名库: -lnamespace 标准链接库以lib开头, 并以so/a结尾. example gcc test.c -o test -L. -lhello 非标准命名库: -l:libname 非标准链接库命名就很个性了, 可以根据自己的爱好自己命名, 但大部分是要链接库的realname或者soname, 而不是链接linkname时用到 example gcc test.c -o test -L. -l:libhello.a 参考: ld library search path for…
函数1: pcap_next_ex(pcap_t*                       p, struct pcap_pkthdr**   pkt_header, const u_char*             pkt_data ) 从一个网络接口或离线捕获方式(例如读文件)读取一个数据包.该函数被用来重新获得下一个可用的数据包,没有使用libpcap提供的传统的回调方法.pcap_next_ex用指向头和下一个被捕获的数据包的指针为pkt_header和pkt_data参数赋值.…
转自http://blog.csdn.net/kankan231/article/details/24243871 在Linux下编译链接或运行c/c++程序时可能会遇到找不到头文件,找不到库文件的错误,简单总结一下这些错误的解决方法 1,找不到头文件 解决方法一:在编译时使用 -I 来指定头文件的路径,例如把头文件放在 /home/user/include/ 目录下,则在编译时加上 -I /home/user/include/ ,如有多个目录,可多次使用-I来指定 解决方法二:将头文件的路径加…