报错大致如下: main.cpp:(.text+0x49): undefined reference to `boost::system::generic_category()'main.cpp:(.text+0x53): undefined reference to `boost::system::generic_category()'main.cpp:(.text+0x5d): undefined reference to `boost::system::system_category()'…
gcc -l参数和-L参数 -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了 好了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,…
一 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库.使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so.如果要指定为连接静态库则使用: gcc test.cpp -L. -static -ltestlib 使用静态库进行连接. 当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连接的…
转载于https://blog.csdn.net/zhangdaisylove/article/details/45721667 1.库的分类 库有静态库和动态库,linux下静态库为.a,动态库为.so.windows下静态库为.lib,动态库为.dll. 静态库是在编译的链接阶段链接嵌入到程序中.因此链接了静态库的程序之后与静态库没有了关系,你如果更新了静态库,使用静态库的程序需要重新链接. 动态库在在运行阶段加载的,不会链接到使用动态库的程序中.有点是一旦修改了动态库,所有使用动态库的程序…
dynamic link library Dynamic-Link Libraries (Windows) https://msdn.microsoft.com/en-us/library/windows/desktop/ms682589(v=vs.85).aspx A dynamic-link library (DLL) is a module that contains functions and data that can be used by another module (applic…
介绍 程序参数项(program options)是一系列name=value对,program_options 允许程序开发者获得通过命令行(command line)和配置文件(config file)获取这些参数项. 为什么需要这样一个库?为什么比你手工写代码分解命令行参数要好? 使用更容易.定义参数处理的语法简单,库自身很小.像转换参数值到指定的类型和保存参数值到变量的事情都是自动处理. 错误报告更友好.可报告错误的命令行参数.另外这个库能自动生成使用帮助,避免手工更新使用帮助导致的不一…
静态库和动态(共享)库静态库:编译程序在编译使用库提供的功能代码的程序时将代码复制到该程序然后编译成可执行程序,这种库成为静态库共享库:共享库比静态库的处理方式更加灵活,因而其产生的可执行文件更小,其文件后缀为 .so,代表共享对象(shared object)  使用共享库链接的可执行程序只包含了它所需要的函数的表格,并没有从目标文件中复制全部的外部函数的机器代码 在可执行文件开始执行时,操作系统将外部函数的机器代码从磁盘上的共享文件复制到内存中,这个过程称为动态链接. 它使可执行文件更加精简…
总结今天遇到的一个so库链接.运行问题. 这几天修改了xapian的源码,重新编译so库,再重新编译之前的demo程序,跑起来后却发现执行的函数并非我修改过的,使用的还是老版本.折腾了一会儿,发现是因为/usr/local/lib目录中含有同名so库导致.这里记录下正确的解决思路. 1 确保链接到了正确的so库 gcc可以通过-L指定链接时所依赖库的搜索路径,譬如:g++ -std=c++0x -L/data/home/cswuyg/xapian_proj/xapian-core-1.2.25-…
在Linux环境下,我们通常用gcc将C代码编译成可执行文件,如下就是一个简单的例子: 小实验:hello.c #include <stdlib.h> #include <stdio.h> void main(void) { printf("hello world!\r\n"); } 可以通过如下指令来编译出一个可执行文件: gcc hello.c 执行完该命令后,就会得到一个a.out的可执行文件. 编译的过程 前面的例子只是简单的介绍了一下gcc的使用方法,…
Linux C 编程入门之一:gcc 编译动态库和静态库 cheungmine 2012 参考: C程序编译过程浅析 http://blog.csdn.net/koudaidai/article/details/8092647 1 准备工作 Windows7+Cygwin+gcc 在同一个目录下准备好下面3个文件,其中3-2,3-3用来生成动态库或静态库: 主调用程序源代码3-1:main.c /** * main.c */ #include <stdio.h> #include <ma…