编译Linux使用的.a库文件

首先是须要编译成.a的源文件

hello.h:

#ifndef __INCLUDE_HELLO_H__
#define __INCLUDE_HELLO_H__

void hello(const char *name);

#endif // end __INCLUDE_HELLO_H__

hello.c

#include "stdio.h"

void hello(const char *name)
{
    printf("Hello world %s\n", name);
}

和一个在linux平台上做測试的main.c

#include "hello.h"

int main()
{
    hello("everyone");

    return 0;
}

在Linux上面做測试。编译成.a文件,主要利用.o文件和ar命令

1、首先生成.o文件:

gcc -c hello.c

这样源码的文件夹下就会产生一个hello.o

2、利用ar命令,从.o文件里创建.a文件

ar cr libhello.a hello.o

这样就能够生成.a文件了。注意,所要生成的.a文件的名字前三位最好是lib,否则在链接的时候。就可能导致找不到这个库

3、在linux下測试使用

编译main.c。并让hello.a链接到main中

gcc main.c -L. -lhello -o main(注意这里-L后面有个.)

这样在当面文件夹以下就出现了可执行程序main。直接执行就是我们索要的结果了

时间: 2024-11-04 10:54:41

编译Linux使用的.a库文件的相关文章

linux编译链接找不到库文件的解决方法。

今天编译出现ld: 0706-006 Cannot find or open library file: -l xerces-c_static,ld:open(): A file or directory in the path name does not exist.这个熟悉得不能再 熟悉的链接错误. 很简单,编译器打开xerces-c_static.a失败.出现这个错误的原因往往是因为目录库文件xerces-c_static.a没被编译出来或不存在. 于是第一反应,看一下xerces-c_s

【原创】源码编译libevent-2.0.21-stable生成库文件说明

按照 README 中的说明,首先执行 configure 下面的输出信息是针对源码编译所在机器进行的检测 [[email protected] libevent-2.0.21-stable]# ./configure checking for a BSD-compatible install... /usr/bin/install -c ... configure: creating ./config.status config.status: creating libevent.pc con

VS编译linux项目生成静态库并在另一个项目中静态链接的方法

VS2017也推出很久了,在单位的时候写linux的服务端程序只能用vim,这让用惯了IDE的我很难受. 加上想自己撸一套linux上的轮子,决定用VS开工远程编写调试linux程序. 在windows下编写静态库并在另一个项目中引用很简单 新建项目的时候选择静态库,进去把代码撸好,即可编译出静态库*.lib 随后在希望使用该静态库的项目中设置一下链接器"附加库目录"为"../Debug"(和你的输出路径有关),然后添加"附加依赖项"静态库名.l

编译iOS使用的.a库文件

首先是须要编译成.a的源文件 hello.h: #ifndef __INCLUDE_HELLO_H__ #define __INCLUDE_HELLO_H__ void hello(const char *name); #endif // end __INCLUDE_HELLO_H__ hello.c #include "stdio.h" void hello(const char *name) { printf("Hello world %s\n", name);

编译安装时yum没有库文件的解决方法

centos 5/6 epel yum源安装 在centos6.x 上编译安装php时,如果指定编译参数  --wity-mcrypt  会需要安装 libmcrypt-devel这个包才可以.但是当使用yum install  libmcrypt-devel 的时候,会提示无这个包.这是因为centos6.x 默认的yum源不在包含这个资源.需要第三方资源. 首先现在如下rpm包,然后安装对应的rpm包centos5 32位epel源下载地址: www.lishiming.net/data/a

内核源码编译多余出来的lib库文件干啥用的

场景说明:从内核的官网下载2.6.32的内核源码,然后使用make menuconfig指令,配置内核,使用make module的过程中,会在/lib/module下生成2.6.32的文件夹 ,将某些驱动以模块的方式存在在这个目录下,但是很遗憾,机器上的内核版本是2.6.32.431,我非常好奇的就是这是啥门子的内核版本, 如何是好啊,所以在实际的目录下/lib/module下还有一个2.6.32.431的文件夹,很明显,如果这个时候生成,如果我执行make install指令,会产生什么惊天

永远也记不住linux环境变量,库文件,头文件...

1)安装cp node-v4.9.1-linux-armv7l.tar.gz /usr/local/cd /usr/local/tar xvf node-v4.9.1-linux-armv7l.tar.gz 2)添加环境变量 export PATH=$PATH:/usr/local/node-v4.9.1-linux-armv7l/binexport LD_LIBRARY_PATH=/usr/local/node-v4.9.1-linux-armv7l/lib:$LD_LIBRARY_PATH

Linux安装库文件(环境变量和makefile)

CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项.这两个变量实际上涵盖了编译和汇编两个步骤. CFLAGS/CPPFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include.同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来. LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件

在Ubuntu宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,类似于PC上的ldd命令

在电脑上安装的Linux系统中,有一个ldd命令,可以查看对应的可执行文件或库文件依赖哪些库,但可执行文件或库文件要求与操作系统的编译器类型相同,即电脑是X86的GCC编译器,那么无法通过ldd命令查看ARM交叉编译器编译出来的可执行文件或库文件. 如果想在Ubuntu等Linux宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,可以通过以下命令: [email protected]:$ arm-linux-readelf  -a  busybox |grep "Shared&qu