MakeFile库链接问题 [问题点数:20分]

Bbs1
本版专家分:0
结帖率 45.45%
Bbs5
本版专家分:3109
Blank
红花 2018年4月 硬件/嵌入开发大版内专家分月排行榜第一
Bbs1
本版专家分:0
Bbs1
本版专家分:70
其他相关推荐
用实例程序再聊makefile指定头文件和库出错的那点破事
在文章http://blog.csdn.net/stpeace/article/details/50985578中, 我说过makefile指定头文件和库文件出错的那点破事, 今天破事重提, 用实际例子来聊一下. taoge@localhost Desktop> cat basic_add.c int basic_add(int x, int y) { return x + y; }ta
linux 库的依赖和链接的顺序
linux库的依赖和链接先后顺序
Makefile 连接库文件的方法
Linux的静态库是以.a结尾的,要连接静态库有两种方法,一种是在编译命令最后直接加上库路径/库名称。例如你的库在绝对目录/lib/libtest.a下面 你就可以这样来编译 $(CC) $(CFLAGS) $^  -o $@  /lib/libtest.a 另外一种方法是,你可以用-L制定库德路径,用-l指定库的名称 例如库的名称为libtest.a 那么就用-ltest CROS
Makefile中库链接问题
这个很短 LIBS = -L dir -llibname1 -llibname2  -llibname3 dir 是库所在的路径 libname 是库的名字 注意: 库的顺序,makefile先识别后面的库,是堆栈的思想
makefile 中指定程序运行时加载的库文件路径
makefile 中指定程序运行时加载的库文件路径
链接动态库静态库,且需先编译库的makefile
本示例演示了需链接动态库静态库,且需要先编译动态库静态库的makefile编写方式,makefile文件内部有详细的注释,目录下也有介绍文档,希望大家在遇到这种情况时,把本示例稍作修改,就可以运行起来
Linux下Makefile中动态链接库和静态链接库的生成与调用
背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译、链接、生成可执行文件,从而实现了移植的过程。平台是Toradex的Apalis TK1,三千多元,买回来我就后悔了,全是英文资料,还各种Bug,迟迟无法上手。早知如此,还不如直接买Nvidia的Jetson TK1呢。书归正传,今天写一下Makefile文件中,动态链
makefile链接顺序
1. 你有一个library或者是可执行文件,你可以这样查看他的依赖关系: readelf -dldd工具 2.查看某个. c文件引用了那些头文件   gcc -M    :查看引用的全部头文件(包括系统头文件)  gcc -MM :忽略系统头文件 3.对于library的查找 查找需要连接的符号名是从前向后找---即最后一个-l库文件最先调用;根据-L指
makefile中指定动态库路径
我们把一个项目做到一个文件夹下面,以后要用的就拷贝整个文件夹到服务器上就好了,现在涉及到了动态库的问题,会在服务器上编辑,但不在每台服务器上都加上新增的动态库路径。所以想在makefile中修改使其更傻瓜。   gcc中的rpath用法: -Wl,-rpath,dir 多个dir之间用冒号分隔: -Wl,-rpath,dir1:dir2:...:dirN     对于我们的项目: L
makefile与动态链接库案例分析——动态库链接动态库
背景:效率考虑,要重用把服务器主备机方案,以库Libmdpha(高可用)的形式加进主工程dds(调度数据服务器)。 有源代码,打算直接编译Libmdpha.so.xxx,加入主工程dds。复制动态库到主工程相关路径,并改makefile,主要加复制命令和建立软连接的命令,库名注意统一: 引用库中加入Libmdpha 同时加         cp -f $(INTERFACES_
通用Makefile的编写和在项目工程中使用Makefile(包括动态库、静态库的链接、整个工程联合编译)
一、通用Makefile文件的编写        (1)、什么是通用Makefile?                     这里的通用Makefile指的是它既能编译可执行文件、也能编译动态链接库、又能编译静态库,只需要更改很少的内容即可。        (2)、写一个通用Makefile #-------------------------配置区域------
Makefile应用之静态链接
http://www.cnblogs.com/huochangjun/archive/2012/09/04/2670150.html Lunix下编译静态库文件: .o后缀文件:编译生成的中间代码文件; .a后缀文件:静态库文件,编译的时候会合到可执行程序中,文件比较大; .so后缀文件:动态库文件,只是一个指向,不会合到可执行程序中,当要调用函数库的时候才使用; 用一个简单
makefile 指定库的路径
makefile 指定库的路径 现有libmad交叉编译后安装于:/home/andy/share/libmad_install目录 现在应用程序miniplayer位于:/home/andy/share/mini_player目录 mini_player中的makefile里,怎么指定libmad库和mad.h头文件的路径呢? 指定 头文件用  -I /home/andy/sh
Openssl 库的静态链接
链接Openssl库的时候,遇到一个问题:明明在Makefile里指明了link指定的.a文件(openssl-1.0.1c/lib/libssl.a 和 openssl-1.0.1c/lib/libcrypto.a),但build完成后的可执行程序在运行时还是会去link操作系统下的Openssl动态库 /lib64/libssl.so.10,难道不是静态链接的? (假设可执行文件是 /hom
Makefile 连接静态库注意事项
Linux的静态库是以.a结尾的,要连接静态库有两种方法,一种是在编译命令最后直接加上库路径/库名称。例如你的库在绝对目录/lib/libtest.a下面 你就可以这样来编译 $(CC) $(CFLAGS) $^  -o $@  /lib/libtest.a 另外一种方法是,你可以用-L制定库德路径,用-l指定库的名称 例如库的名称为libtest.a 那么就用-ltest
Makefile 编译动态库文件及链接动态库
原文转自 :http://www.cnblogs.com/ljtknowns/p/5647793.html 文件目录结构如下 1 dynamiclibapp.c 2 Makefile 3 comm/inc/apue.h 4 comm/errorhandle.c 5 dynamiclib/Makefile 6 dynamiclib/dynamiclib_add.c 7 d
使用Makefile链接so库文件
初学Makefile,权当是笔记,希望对别人有些帮助吧。 ------------------------------------------------------------------------------------ 本次例子目录结构如下: 目录说明: lib目录是我自己写的一个so库文件,名为libA.so,很简单,里面的内容截图如下: -----------
Make.am中生成.la动态库的同时要链接.a静态库的问题
最近做项目的过程中间需要在生成.la动态库的同时链接libnet.a静态库,本来正确的写法应该是   libcharon_la_LIBADD += /usr/lib/libnet.a   但是编译的时候报错: /usr/bin/ld: /usr/lib/libnet.a(libnet_build_ip.o): relocation R_X86_64_32 against `a local
gcc链接g++编译生成的静态库和动态库的makefile示例
使用c++开发程序或者库时,将库提供给其他人使用。 然而使用者是使用c开发的程序,链接g++编译生成的库时,于链接gcc生成的库,有所不同。 首先是静态库,以链接g++编译生成的libmylib.a为例子 mylib依赖于pthread,rt,math库,链接时必须放在mylib之后。 同时-Wl,--no-as-needed -ldl添加在末尾是必须的。 arm和x86有些不同,就是a
《调用opencv库的简单makefile示例》
SRCS = $(wildcard *.cpp) # wildcard把 指定目录 ./ 下的所有后缀是cpp的文件全部展开。 OBJS = $(SRCS:.cpp = .o) # OBJS将$(SRCS)下的.cpp文件转化为.o文件 CXX = g++ # 代表所使用的编译器 INCLUDES = -I/usr/local/include/ope
ANDROID NDK makefile 链接静态库的方法
[NDK] Android.mk Android NDK的 makefile在r4及r5b的寫法有點不一樣 --------------------------For r4 ------------------------ LOCAL_PATH:= $(ca
gcc MakeFile文件引用静态库与动态库的区别
gcc MakeFile文件引用静态库与动态库的区别makefile文件引用库路径,如下: LIB_PATH += -L路径 makefile文件引用静态库/动态库,如下: LIBS += -l库 (这的库是去掉lib,.a, .so剩余部分,如libaaa.so 这写LIBS += -laaa 如libbbb.a 这写LIBS += -lbbb)引用动态库与引用静态库区别,编译没有区别,运行
GCC 编译动态链接库和静态链接库 + 大型工程Makefile编写 + Linux环境变量的设置和查看方法
GCC 编译使用动态链接库和静态链接库  1 库的分类 根据链接时期的不同,库又有静态库和动态库之分。 静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行。 有别于静态库,动态库的链接是在程序执行的时候被链接的。所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用。 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是
gcc 使用静态库文件 链接库文件 .a makefile .so
上篇文章说了如何生成静态库文件:http://blog.csdn.net/lanmanck/archive/2009/10/12/4659161.aspx这里也有篇文章说的很好:http://wickyl.javaeye.com/blog/137460 这里提一下使用方法:下面的例子中,库文件位于一个文件夹libxxx,而测试文件main.c和文件夹在同一个目录。Makefil
makefile 中的 指定库和头文件的路径
makefile中的指定头文件,源文件 可以使用VPATH变量也可以使用vpath后者可以分类指定头文件源文件的搜索路径 记住这样指定的路径仅仅是makefile本身查找头文件源文件的路径 在执行makefile时,还要指定gcc/g++搜索头文件库文件的搜索路径 -L //指定库文件搜索路径  -ltest//指定使用的动态库/静态库 -I //指定搜索头文件的路径
Linux学习笔记——例说makefile 增加自定义共享库
0.前言     从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法。     例说makefile大致分为4个部分     1.只有单个C文件     2.含有多个C文件
makefile中库的顺序问题
makefile中,比如:LIBS=-L$(APPL_LIB) -labc -lxyz 这里的库abc和xyz的顺序有什么规定么?   1.如果abc依赖xyz,就把abc放在前面 链接时会把abc所需要的符号找出来,然后继续往后走,找这些符号有没有出现 ,如果走到末尾还没出现,就报错 2.如果abc和xyz互相依赖呢?尝试:  -labc -lxyz -labc 3. 静态连
makefile---使用共享库文件so
环境:Vmware Workstation;CentOS-6.4-x86_64 说明: 1、作用:告诉gcc编译器要在哪里链接链接那个文件。 2、gcc在链接的时候要加-l参数和-L参数 3、-l:告诉gcc需要链接指定的共享库文件 -l后面跟的共享库文件的名字 如:共享库文件的名字如果是libmyso.so,那么在写的时候,就要把前面的lib和后面的.so去掉,得到myso
Linux学习笔记——例说makefile 增加系统共享库
0.前言     从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法。     例说makefile大致分为4个部分     1.只有单个C文件     2.含有多个C文件
简单编写makefile文件,实现GCC4.9编译项目,加入boost库测试等等。。
一、需要用到的几个测试文件
makefile 强制使用静态链接
方法1-static : 所有的库文件使用静态库链接g++ -static -ltest -lfoo 方法 2:这里有2个命令介绍一下:–Bdynamic : 用于在各种可能的情况下为共享动态绑定设置首选项。-Bstatic : 将绑定只限制于静态库。当库的静态和动态版本都可用时,使用这2个选项在命令行首选项间进行切换。 注意使用这2个命令需要配合 -Wl 选项一个例子g++ -Wl,-Bsta
Ubuntu下程序的编译和链接过程和openCV的makefile文件
简述 在windows下编程,可能一个F5就能让代码跑起来,那是因为IDE(比如VS2103等)已经帮你做好了后台的编译和链接过程。当在Ubuntu下让代码跑起来,就要自己去理解代码的编译和链接过程。 下面说说什么是编译,什么是链接: 编译就是将源文件通过Complier,生成中间文件,在windows下,中间文件就是.obj 文件,在Ubuntu下,就是.o文件,即 Object...
Linux中的静态库、共享库、头文件及makefile文件举例
库:是一组预先编译好的函数的集合,linux中标准系统库文件一般存储在/lib和/usr/lib目录中 静态库:在程序编译过程中,就被链接到了程序编写者所写的源代码中,静态库以.a结束。 共享库:在程序运行时载入,编译时只需说明所需要的共享库文件即可。共享库以.so接受。 头文件:用于保存程序的声明。 makefile文件:makefile带来的好处就是——“自动化编译”,一旦写好各文件的
makefile指定头文件和库出错的那点破事
某模块提供了test.h头文件和libtest.a库, 供外部代码调用: 1. 如果在代码中包含了某头文件test.h, 但在makefle中没有指定头文件路径/或者头文件根本不存在, 会出现编译错误, 会提示缺少test.h. 2. 如果包含了test.h头文件,且指定了头文件路径, 且指定libtest.a库, 但实际此库并不存在(比如没有提前编译出来), 会出现编译错误, 提示缺少 cannot find -ltest 3.如果包含了头文件,且指定了头文件路径,
静态库的链接顺序
今天工作中遇到了一个很诡异的问题: 项目中, a.c和b.c编译出的obj先打包成静态库c.a, 再和另外一个d.a以及main.c编译出的obj链接成最后的bin文件. a.c中有private_init()和private_read()两个函数, 其中private_init()是个空函数, private_read()则在d.a中被调用. 出现的现象是这样: 如果我main.c中
编译mysql数据库文件的Makefile
在编译的时候,有的文件链接了数据库,这个时候Makefile的编辑与普通的有所区别。 记录在此,以备后用 obj=main.o myServer.o Mysql.o pub.o src = $(wildcard *.cc) obj = $(patsubst %.cc,%.o,$(src)) target = app $(target):$(obj) g++ $^ -o $@ -L
linux编译动态库和静态库的makefile示例
根据GenDll.cpp文件,分别生成动态库.so和静态库.a文件,需要依赖的外部库为opencv。1. 静态库的生成makefile命令的简介可参考:跟我一起写 Makefile。使用ar命令生成.a文件,可参考:Linux下动态库(.so)和静态库(.a)# 1、准备工作,编译方式、目标文件名、依赖库路径的定义。 CC = g++ CFLAGS := -Wall -O3 -std=c++0x
makefile静态库 动态库
动态库调用另外一个静态库: CC=$(CROSS_COMPILE)gcc LD=$(CROSS_COMPILE)ld CFLAGS:=-fPIC LDFLAGS:=-shared -fpic SOURCE:=$(wildcard *.cpp) OBJS:=$(patsubst %.cpp,%.o,$(SOURCE)) TARGET_LIB:=liblive.so INC = -I../libr
c++ 编译链接makefile思路整理
长虹剑自己的一些经验总结,具体请自行根据实际情况决定。 (未完且待细节补充 ) - 2016-10-25 补充了一个makefile模板 - 2016-10-27 补充了cmake及cmake生成nmake,整理了windows下有关编译的目录,有助于理解vs的x86和x64编译过程。 - 2017-6-7 加入了一个gcc选项,关于库的依赖顺序前言无论在windows上还是linux上我
makefile同时指定多个同名头文件/库文件, 那实际到底采用的是哪个呢?
虽然是10月8号了, 但仍然处在休假中, 这种感觉不错。 为了避免节后综合征导致上班没精神, 所以今天就开始在家玩玩代码, 提前进入工作状态。          今天, 我们来看看这样一个问题makefile同时指定多个同名头文件或库文件, 那实际到底采用的是哪个呢?            我们先说头文件。          在实际开发中, 一些公共的头文件, 经常被到处拷贝, 这是常有的事
Makefile 编译时加入额外函数库链接
all: cmysql.cpp g++ cmysql.cpp -o cmysql -I/usr/include/mysql -lmysqlclient -L/usr/lib64/mysql clean: rm cmysql -I:指定搜索相关include文件的目录,默认在/usr/include下。 -l:加入某个函数库的意思; mysqlclient 是指l
make,makefile和程序的编译链接过程
一,Linux下程序运行过程 1,在一个目录下新建三个文件:main.c hello.c hello.h分别编写他们如下图: 2,想要让这个程序执行起来,就必须对上面的三个文件分别进行编译链接执行,如下图: 通过上面这个过程。我们可以大致总结一下gcc编译器把目标文件经过预处理,编译,汇编,链接生成可执行文件的过程和命令: (1)预处理(宏替换,删除注释和多余的空白字
ubuntu下编译和链接的过程 &&编写opencv makefile
编译&&链接编译就是将源文件通过Complier,生成中间文件,在windows下,中间文件就是.obj 文件,在Ubuntu下,就是.o文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。过程(1)在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出...
在查看makefile文件时候关于pthread随笔
libCardApp.so:CFLAGS = -g -rdynamic libCardApp.so: DES.cpp.o TOOLS.cpp.o   CARDCMD.cpp.o SAM.cpp.o CARD.cpp.o  CARD1.cpp.o CARD2.cpp.o CARD3.cpp.o CARD4.cpp.o CARD5.cpp.o CARD6.cpp.o CARD7.cpp.o CARD
makefile 生成/使用静态库
// puls.h int my_puls(int x,int y);   // puls.cc int my_puls(int x,int y) { return x + y; }   // puls_lib_test.cc #include"puls.h" #include int main() { int puls_res = my_puls(3,4); printf
Mac系统中makefile中如何使用【.dylib】动态链接
gcc -shared -fpic \ -L/Library/Frameworks/Python.framework/Versions/2.7/lib \ -lpython2.7 \ -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr
一点一点学写Makefile(3)-增加第三方库和头文件
我们在写代码的时候不一定都是有自己来完成,一个工程中会大量使用一些比较优秀的动态库、静态库等,我们在使用这些库完成所有的代码后,需要在编译的时候将这些库使用的头文件添加到我们的工程上,将他的库文件也添加到我们的工程中,接下来我们就来看一下怎么来添加。 我们在项目中很少将第三方库与我们自己的代码放到同一个目录中,而是有一些约定俗成的存放方法: 如上图,我们会将第三方库的头文件放到includ
最简单 的入门且最直观的Makefile和.so文件编译链接使用方法
1、带main函数的.cpp文件:主要添加头问价“a.h” #include #include "a.h" using namespace std; int main(int argc,char **argv) { cout }  2、生产.so的a.cpp文件内容: #include using namespace std; int add(int
Windows makefile 多个引用库文件路径配置
Windows makefile 多路径配置 由LIB参数控制。 用分号";"分割多个路径,如: TOOL32 = D:\Program Files\VS2003 LIB= $(TOOL32)\lib;$(TOOL32)\PlatformSDK\Lib 路径中如果有空格导致无法找到文件,则试试加上双引号"",如: LIB= "$(TOOL32)\lib";"$(TOOL
编译基础——如何用g++编译自己的库,以及一个简单的makefile文件
本文介绍如何用g++编译自己的库,以及一个简单的makefile文件。
g++编译链接c语言文件报错“undefined reference ” 的处理
用QT写一界面程序,其中用到另一同事写的一个小功能,他是用c语言写的,于是把他的代码头文件和源文件都copy过来了,加入工程中,结果链接的时候就总报错 undefined reference 某个函数。再三确认了makefile文件和源码,表示没问题,后来想到或许是g++和gcc是不是编译后不一样啊,再上网一查,果然,g++编译的.o文件C语言好像无法识别(大概是这个意思,具体是怎样的也没细研究)...
调用动态库的程序加入编译选项-rdynamic和-ldl
调用动态库的程序加入编译选项-rdynamic和-ldl,动态库和静态库深入解析
用于编译可执行程序,静态库,动态库的通用的Makefile
经常写些测试程序,很有必要有个通用的Makefile节省开发时间 【可执行程序通用makefile】 ------------------可执行程序通用makefile开始----------------------------------- CFLAGS = -g -D _DEBUG -I../../include -I/usr/local/include-L../../lib -L/us
简单静态库与动态库的创建以及Makefile基本使用
静态库的创建以及使用: gcc -c log.c |生成 log.o 文件 ar cr libstatic.a log.o |创建静态库libstatic.a 并将 .o 问价链接到 .a 文件中 gcc main.c -L. libstatic.a log.h -o out |-L:链接库 .:表示当前目录 后跟要链接的库和头文件, 生成可执行程序out 动态库的创建以及使用: gcc -c -fPIC log
Linux下编写C++程序连接mysql数据库编译时指定头、库
Linux下编写C++程序连接mysql数据库 编译时需要指定头文件路径、mysql库,有两种方式: 1. g++ main.cpp mysql_deal.cpp -I/usr/include/mysql -L/usr/bin/mysql -lmysqlclient 2. g++  $(mysql_config --cflags) main.cpp    mysql_deal.cpp
使用Automake生成Makefile及动态库和静态库的创建
使用Automake创建和使用静态库1. 目录结构如下:example|——src 目录(存放源代码文件) |——hello.c|——lib 目录(存放用来生成库的文件) |——test.c 用来生成静态库libhello.a|——include 目录(存放程序中使用的头文件) |——
[iOS]Makefile交叉编译静态库TA-lib
为了使Cocoa-Charts支持客户端数据计算,需要为Cocoa-Charts增加技术分析数据计算功能,目前比较通用的是TA-lib,但是TA-lib没有提供iOS版本的静态库文件,因此需要在X86平台上交叉编译适用于iPhone模拟器和iPhone真机的TA-lib静态库,用于调试和开发iOS应用程序,使TA-lib支持ARMv7 ARMv7s i386等系统架构的多种iPhone机型或模拟器
学习在linux和windows安装GSL和使用,编译 链接makefile的撰写和实现
一, 先来一个大家常常遇到的问题解答:Visual studio 2012 Debug版本转化到Release版本,编译不成功是因为Release中的设置,链接库和Debug不相同。需要手动修改成为一样的才可以。系统并不会直接给你转换成为相同配置。 二,安装gsl 库连接和makefile 的撰写,自己成功在linux下面成功编译通过 /*感谢来自清华大学的陈俊杰同学的修改贡献*/  new
Ubuntu下makefile及gcc生成静态库动态库的简单使用举例
Ubuntu下makefile及gcc生成静态库动态库的简单使用举例
linux动态库及静态库的制作 和makefile 的简单编写
一.库 什么是库,简单的可以说是可执行代码的二进制形式,能够被操作系统载入内存执行。操作系统的不同,二者的库也是不兼容的,如windows与linux. 库又分为静态库和动态库,动态库又称为共享库。linux下静态库(.a)文件,动态库(.so)文件。主要存放函数库的路径有:/lib , /usr/lib. 二.静态库与动态库 1.静态库 这类库的名字一般是libname.a.利用静态库
Makefile中指定链接地址的方式
两种: 第一种是指定连接器LD的flag 如:arm-linux-ld -Ttext 0x0 -o led.elf $^(这句表示使用依赖编译链接生成led.elf目标文件,编译链接工具为arm-linux-ld),链接地址依靠链接器的flag(Ttext)来指定,为0 第二种:依靠链接脚本来指定 如:arm-linux-ld -Tlink.lds -o led.elf $^,这句功能同上...
静态库链接动态库时,如何使用该静态库
假设libXXX.a用了libpthread.so的函数“pthread_create”,那libXXX.a在链接时,有没有把“pthread_create”函数copy到自己身上,使其完全独立?main.c在链接时,只需要链接libXXX.a,还是连libpthread.so也要链接?!这就是我要讨论的内容!
编译.ko的简单Makefile实例
需要在kernel层编译好的.ko文件,然后放到Android文件系统中进行编译,上层会在适当的时候调用。 需要准备源文件: 我这里systest.c 需要自己编写一个makefile 然后执行make就可以编出systest.ko文件 obj-m := systest.o                                                          
makefile链接使用eigen库
需要进行矩阵运算时,eigen是一个非常有效的库。linux下eigen安装可以通过apt install的形式或者到官网下载源码编译的形式安装(最后要sudo make install)。以一个小例子为例: #include #include using namespace std; using namespace Eigen; int main(int argc, char **ar
Sqlite3通过Makefile编译成动态链接
TARGET_LIB:=libsqlite3.so LIBS := -lpthread -ldl CFLAGS := -g -Wall -shared -fPIC -I. $(LIBS) CC := mipsel-openwrt-linux-gcc #交叉编译下的编译路径 STRIP := mipsel-openwrt-linux-strip OBJ := sqlite3.o all
linux 中-ldl和-lpthread 是什么意思?
在《Using the GNU Compiler Collection》gcc 4.30 中关于-lpthread的描述如下: -pthread       Add support for multithreading using the POSIX threads library. This option              sets flags for both the prep
Makefile之关于程序的编译和链接
关于程序的编译和链接 —————————— 在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是.obj 文件,UNIX下是.o 文件,即 ObjectFile,这个动作叫做编译(compile)。然后再把大量的ObjectFile合成执行文件,这个动作叫作链接(link)。 编译时,编
链接为可执行文件时‘未定义的引用’问题
很奇怪我在creatdir.c中引用c_zhtclent.h头文件,c_zht_insert2为c_zhtclent.h中的函数 为什么在编译为.o文件的时候没有错误,在连接为可执行文件的时候就会出现未定义的引用? 原因:缺失了库zht  解决: 在makefile中的LDFLAGS中加人-Lzht/lib -lzht -lstdc++ -lprotobuf -lpthread用于加载这些
linux .so动态库makefile的嵌套调用
1、动态库的编译 下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:test.h,三个.c文件:test_a.c、 test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。 test.h:  #include   "stdio.h" void test_a(); void test_b(); void test_c();   test
gcc做一个静态库文件 .a .so makefile
静态库文件一般是a为后缀,如libxxx.a。实际上是把全部o文件打包。其实只用到了2句话:gcc -c src.car r libxxx.a src.o 提供下makefile参考:CFLAGS := -g -Wall  CC := arm-linux-gcc  CSRCS := bbb.c  COBJS := bbb.o  INC
多子目录的makefile编译库模板
经过不断的实验,终于改出来了一个可以用于多个子目录,多个文件的Makefile模板,只用来生成静态库文件,后面再继续添加内容吧先来看下目录结构[zhang@zwfedora23 libs]$ tree . ├── Makefile ├── src │ ├── libs1.c │ ├── libs1.h │ ├── libs2.c │ ├── libs2.h │ └── main.
MakeFile库路径搜索
交叉编译的时候不能使用本地(i686机器,即PC机器,研发机器)机器上的库,但是在做编译链接的时候默认的是使用本地库,即/usr/lib,/lib两个目录。因此,在交叉编译的时候,要采取一些方法使得在编译链接的时候找到需要的库。  首先,要知道:编译的时候只需要头文档,真正实际的库文档在链接的时候用到。 (这是我的理解,假如有不对的地方,敬请网上各位大侠指教) 然后,讲讲如何在交叉编译链接的时候
linux下静动态库Makefile的编写和应用
前言 在linux下做项目,难免会有对库的封装,需要把自己编写的程序编译成静动态库给其他人提供接口,这时候最重要的就是Makefile的编写。 一、动态库Makefile的编写和使用 1、动态链接 连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序,也就是你在执行应用程序的时候一定要把你编译后的.so配置到你执行程序环境下,直接拷贝到/lib
Makefile 编译与链接选项及CFLAGS与LDFLAGS示例说明
最近看了makefile的手册之后,发现还是不知道怎么写makefile,而且就连看也看的是云里雾里,就我现在工作当中看到的一些makefile文件,只能看个大概的意思,一旦涉及到文件添加、静态库、动态库等增加、删除;文件搜索路径等的修改就没法下手了,因此必须对我比较关注的地方进行深度学习,知其然还要知其所以然,知道怎么从无到有写出来,而且别人的makefile还要知道怎么根据需求的变化进行修改。...
Makefile 知道这些就够用了
makefile文件的编写规则及实例  (2007-07-18 01:18) 分类: Linux系统及编程   1.一个简单的makefile例子   假设一个程序有两个文件file1.c,file2.c,每个文件都包含head.h,生成file可执行文件   file:file1.o file2.o                  附属行(文件的依存关
makefile 编写,编译动态库,编译静态库
1 我 CROSS_COMPILE= CC = $(CROSS_COMPILE)gcc STRIP = $(CROSS_COMPILE)strip CFLAG = -Wall -W -Os -g -o LIBS := -L../lib -lfcgi LIBS += -L../lib -ltinyxml LIBS += -L../lib -lOnvif -lpthread LIBS +=
Linux Makefile 静态库动态库应用实例
在Linux系统中:静态库的创建gcc -c filen.car -cr libname.a file1.o file2.o ...ar:静态函数库创建的命令-c :create的意思-r :replace的意思,表示当前插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误信息,并不替换其他同名的模块。默认的情况下,新的成员增加在库德结尾处。动态库的...
intel dpdk api 添加自己的库和创建自己的实例程序
声明:此文档只做学习交流使用,请勿用作其他商业用途 author:朝阳_tony E-mail : linzhaolover@gmail.com Create Date: 2013-7-24 16:34:34 Wednesday Last Change: 2013-7-24 16:34:52 Wednesday 转载请注明出处:http://blog.csdn.net/linzhao
C、C++的Makefile的编写以及动、静态库的制作调用(包括MAC地址的获取及MD5加密)
一、C代码 静态库 四个.h.c文件 add.h 1 #ifndef ADD_H 2 #define ADD_H 3 4 int add(int a,int b); 5 6 #endif add.c 1 #include 2 3 int add(int a,int b) 4 { 5 printf("%d %d\n",a,b); 6
makefile模板(可执行文件,动态库,静态库)
可执行文件:
Makefile基本语法
1、Makefile基本格式: make所看到的第一项规则会被当做默认规则使用。 一个规则可分成三个部分: 目标:依赖1 依赖2。。。 命令 注意:命令前必须使用有一个制表符()。 例:  foo.o: foo.c foo.h gcc -c foo.c 当要求make执行一条规则时,它首先找到目标和前提条件指出的文件。如果没有任何前提条件都有一条关联规则,那么
多模块编译链接 Makefile文件的编写
一、概述 现在,免费的操作系统Linux的使用者越来越多。Linux的爱好者们也许要在Linux软件开发上一展身手,不过很遗憾,Linux平台上还没有一个像Visual C++或Borland Delphi这样功能强大的开发工具,在Linux平台上编写和调试程序还基本上使用的是命令行方式。 在命令行方式下,如果源程序只有一两个文件,那么还可以使用特定的语言编译器进行编译和链接,但是,一旦源程序
Makefile 构建工程,如果加载opencv等第三方库
1.在命令行终端输入:$pkg-config opencv --cflags,可以查看本机安装的opencv的include头文件的目录。 2.在命令行终端输入:$pkg-config opencv --libs,可以查看本机安装的opencv的libs库的目录。 3.写测试样例test.cc: #include #include int main(i
linux下动态库和静态库的制作、寻找、比较及相关Makefile的编写
一.库的定义 什么是库,在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二者库的二进制是不兼容的。 本文仅限于介绍linux下的库。 二.库的种类 1. 在windows中 .dll 动态库 .lib 静态库 库即为源代码的二进制文件 2. 在linux
ARM:Makefile编写、链接脚本编写、裸板shell框架
《Makefile编写、链接脚本编写、裸板shell框架》 ' 工具:UtraEdit 代码编辑工具 // 此工具里面 Ctrl + h 查看ASCII码 vi中命令模式下: ' :e main.c   // 打开main.c ' :bn            // 回到刚才的.c文件 1. 关于 \r \n的问题 windows系统中: \r    回到行
一个STM32项目的makefile模版详解
啥都不说了,直接上代码,注释相当详细了。 #STM32 makefile template # 生成的文件名 PROJECT = stm32_Mini_Led # 定义文件格式和文件名 TARGET := $(PROJECT) TARGET_ELF := $(TARGET).elf TARGET_B
基于STM32 HAL库在Makefile+GCC-ARM上面的工程编译
之所以用这种方式开发,是因为当下MDK编译的速度实在是太慢了,可能是因为PC是祖传的问题吧。而且个人认为这样可以多了解GCC-ARM的工具以及Makefile,为后续学习u-boot打基础。这种方式适合喜欢旁门左道的道友去学习,而且网上基本找不到关于这种开发模式的文章,写下这个也是为了以后万一以后记不住可以翻出来看看。同时很感谢一些大佬的耐心指导。回归正题。 一、首先是工具及材料的准备 1、一
从github安装C++库,makefile
从github上下载了源代码来编译。却到处踩坑。 首先是makefile,mMakefile里面记录的是 你的工程(也就是一堆程序的有序集合)的编译规则。 一般编译脚本都写在autogen.sh这个文件中  我安装的库的autogen.sh的内容如下: mkdir -p m4 autoreconf --install --verbose ./configure make
linux环境下同时使用静态库、动态库编译程序
1. 应用场景因某些原因,需要同时使用静态库及动态库编译代码。 在这里我需要静态链接的是zbarlib,动态链接的是opencv库。 经过一个下午的艰苦奋斗,分享一下网上的解决方法以及最终导致不成功的原因所在。2.Makfile实例CXX=g++CFLAGS += -I${PWD}/../zbar/include CFLAGS += -I${PWD}/../opencv/includeLDFLA
gcc指定链接库路径后还是找不到库文件
问题描述:makefile中已经指定了库的路径和库的名字,编译时没报错,但程序运行时会报找不到库文件的错误。 解决办法: gcc中加上-Wl,-rpath=. 为什么? gcc -L选项在链接时指定动态库路径,编译通过,但是执行时会找不到路径; gcc -Wl -rpath选项在运行时指定路径,运行时按照指定路径寻找动态库; 也就是说处理动态链接库时有2个路径:链接时路径和运
makefile中编译静态链接
目录结构是, 上面的makefile是子文件夹中的makefile,下面的是外层makefile,编译的话外层的目标依赖内层文件夹的静态链接库。 上层文件夹中的makefile内容如下: O_FILES = MQTTConnectClient.o \  MQTTConnectServer.o \  MQTTDeserializePublish.o \  MQTTFo
Makefile交叉编译
Makefile交叉编译 之前写的Makefile 范例。两个版本,For PC and Cross compile,以后直接用这个模板。 include $(CLEAR_VARS)    INCLUDE = -I. -I../include -I../zlib \        CFLAGS =  $(INCLUDE)    #FOR PC compile
简单谈谈Makefile和交叉编译工具链
先来简单谈谈生成一个可执行文件所需要的过程 预处理(preprocessing)->编译(compilation)->汇编(assembly)->连接(linking) 编译:.c->.s 汇编:.s->.o 连接:多个.o合并成一个可执行文件。 在平常通过将上述四步统称为“编译” 接下来通过两个简单的例子来简单分析MakefileMakefile三大组成:目标、依赖、命令 一 Mak
makefile的常用选项
makefile的选项CFLAGS、CPPFLAGS、LDFLAGS和LIBS的区别LDFLAGS是选项,LIBS是要链接的库。都是喂给ld的,只不过一个是告诉ld怎么吃,一个是告诉ld要吃什么。
makefile 编写之32 or 64位机器
一.Makefile 判断 64位机器 ARCH:=$(shell uname -m) BIT32:=i686 BIT64:=x86_64 all clean: ifeq ($(ARCH),$(BIT64))         @echo x86_64         make $(SubObject) TARGET=$@ else         @echo
linux 动态库的编译、调用,(用Makefile编译)
我们在做一个C/C++项目的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。 这就是动态库,当然也包括静态库。今天聊聊动态库的生成和调用方法。 动态库的生成 首先,创建 动态库 源文件 test_1.h ...
我们是很有底线的
关闭
关闭