精华内容
下载资源
问答
  • 最近看到一模块的程序,在阅读的时候发现一函数有引用,有声明,却找不到在哪里定义,模块只有头文件没有对应的.c文件,顿生疑惑,想着这程序怎么能运行呢。后来发现文件夹中有后缀为.a的文件...

    最近看到一个模块的程序,在阅读的时候发现一个函数有引用,有声明,却找不到在哪里定义,模块只有头文件没有对应的.c文件,顿生疑惑,想着这程序怎么能运行呢。后来发现文件夹中有个后缀为.a的文件,在网上查得原来这是将函数封装成了一个静态库,这样既能实现功能,也对文件的内容起到了保护作用。

    .a文件是静态链接库文件,一般会和一个头文件配合提供给用户使用,它是一个或多个对象文件(.o)的组合。

    下面就以一个例子来说明怎么生成.a文件。

    1. 创建三个文件Test.c , Test.h,main.c

    内容分别如下:

    Test.h

    1 #ifndef _TEST_H_2 #define _TEST_H_3 4 int get_result(int firstNum,int secondNum);5 6 #endif //test.h
    

    Test.c

    1 #include "Test.h"23 int get_result(int firstNum,int secondNum)4 {5     return firstNum secondNum;6 }
    

    main.c

    #include#include "Test.h"
    int main(){    int rlt;     rlt = get_result(23,7);    printf("The result is: rlt = %d\n",rlt);     return 0;}

    其中Test.h,Test.c用于生成静态库,main.c用于测试。

    2. 编译对象(.o)文件

    使用: gcc -c Test.c,  确认是否生成.o文件。

    3. 生成静态库

    在linux环境下输入ar cr libmyTest.a Test.o,  查看当前目录下是否生成了库文件libmyTest.a文件,其中ar为linux环境下的创建、修改库文件的指令,  cr为该指令的选项命令.

    4. 测试

    输入gcc -o main  main.c libmyTest.a,  查看是否生成了main的可执行文件,然后再输入./main即可得到运行结果。  不需要在使用Test.c这个源文件进行编译操作, 直接操作.a库文件即可, 而且得到了.a库文件之后,即使没有了对应的.c源文件也可以编译运行。

    所以模块厂商提供的程序的时候会只提供头文件和库文件,头文件用来说明API接口,用户可以直接进行调用,但是不能看到函数内部是怎么实现的。

    声明:

    本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

    展开全文
  • C语言文件生成静态lib

    千次阅读 2017-04-19 14:30:32
    1,创建三个文件Test.c , Test.h,main.c 内容分别如下: Test.h 1 #ifndef _TEST_H_ 2 #define _TEST_H_ 3 4 int get_result(int firstNum,int secondNum); 5 6 #endif //test.h Test.c 1 #include "Test.h" 2 ...
    1,创建三个文件Test.c , Test.h,main.c
    

    内容分别如下:

    Test.h

    1 #ifndef _TEST_H_
    2 #define _TEST_H_
    3 
    4 int get_result(int firstNum,int secondNum);
    5 
    6 #endif //test.h

    Test.c

    1 #include "Test.h"
    2 
    3 int get_result(int firstNum,int secondNum)
    4 {
    5     return firstNum+secondNum;
    6 }

    main.c

     1 #include <stdio.h>
     2 #include "Test.h"
     3 
     4 int main()
     5 {
     6     int rlt; 
     7     rlt = get_result(23,7);
     8     printf("The result is: rlt = %d\n",rlt);
     9     
    10     return 0;
    11 }

    其中Test.h,Test.c用于生成静态库,main.c用于测试

    2,编译.o文件

    无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序Test.c通过gcc先编译成.o文件。

    gcc -c Test.c

    确认是否生成了Test.o文件

    3,生成静态库

    在linux环境下输入ar cr libmyTest.a Test.o

    通过ls命令可以看到在当前目录中生成了静态库文件libmyTest.a文件

    4,测试

    输入gcc -o main main.c -L. -lmyTest

    输出结果如下图:

    展开全文
  • C++多个文件生成动态实战

    千次阅读 2019-04-14 11:51:10
    四 生成动态库文件libtest1.so [root@localhost test]# g++ test1.cpp test2.cpp -fPIC -shared -o libtest1.so [root@localhost test]# ll total 24 -rwxr-xr-x. 1 root root 8832 Apr 14 11:32 libtest1.so ...

    一 编写test1.cpp

    #include <iostream>
    using namespace std;
    void f1(int age)
    {
        cout << "this is libtest1.so: " << age << endl;
    }

    二 编写test2.cpp

    #include <iostream>
    using namespace std;
    void f2(int age)
    {
        cout << "this is libtest2.so: " << age << endl;
    }

    三 编写main.cpp

    extern void f1(int age);   //声明要使用的函数
    extern void f2(int age);   //声明要使用的函数
    #include <iostream>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        f1(65);
        f2(66);
        cout << "bye" << endl;
        
        return 0;
    }

    四 生成动态库文件libtest1.so

    [root@localhost test]# g++ test1.cpp test2.cpp -fPIC -shared -o libtest1.so
    [root@localhost test]# ll
    total 24
    -rwxr-xr-x. 1 root root 8832 Apr 14 11:32 libtest1.so
    -rw-r--r--. 1 root root  239 Mar 24 13:11 main.cpp
    -rw-r--r--. 1 root root  117 Mar 24 13:11 test1.cpp
    -rw-r--r--. 1 root root  117 Mar 24 13:11 test2.cpp

    五 添加路径到/etc/ld.so.conf

    [root@localhost test]# pwd
    /root/C++/ch10/10.4/test
    [root@localhost test]# vi /etc/ld.so.conf
    [root@localhost test]# cat /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    /root/C++/ch10/10.4/test/

    六 执行ldconfig命令并编译运行

    [root@localhost test]# g++ main.cpp -L. -ltest1 -o main
    [root@localhost test]# ldconfig
    [root@localhost test]# ./main
    this is libtest1.so: 65
    this is libtest2.so: 66
    bye

     

    展开全文
  • CLion一个工程生成多个可执行文件

    万次阅读 2017-12-12 20:41:57
    最近在用CLion在本地环境联系使用libmemcached的API,在主工程中新建...为了生成多个可执行文件,就是修改CMakelists.txt文件,很简单,直接上图吧。步骤 工程内新建一个cpp文件。 打开CMakelists.txt文件并修改文件

    最近在用CLion在本地环境联系使用libmemcached的API,在主工程中新建了一个文件,该文件的主要功能就是生成辅助数据集。为了方便,想让它在同一个工程中编译生成单独的可执行文件。

    CLion使用的自动化编译工具是CMake。为了生成多个可执行文件,就是修改CMakelists.txt文件,很简单,直接上图吧。

    步骤

    • 工程内新建一个cpp文件。
    • 打开CMakelists.txt文件并修改文件。
    • 修改build的配置,该配置指定每次build是编译生成所有可执行文件,还是只生成一个。

    新建文件前,CMakelists.txt文件如下:
    这里写图片描述

    打开菜单Run->Edit configurations
    这里写图片描述
    当前我的工程可以生成两个可执行文件。

    新建a.cpp文件,编写Hello World程序
    这里写图片描述
    IDE会将新增的文件链接到某一个可执行文件中,上图中表示a.cpp文件会和make_data.cpp一起编译生成op_make_data可执行文件。当然这里会报错,因为有两个main函数。

    将a.cpp单独写一行,生成aaaa可执行文件
    这里写图片描述

    再次打开菜单Run->Edit configurations
    Edit configurations
    这里多出一个aaaa的选项。

    很重要的一点,我被这里浪费了很多时间
    这里写图片描述
    被红色框起来的下拉框用来指定编译生成哪个可执行文件。当前我的工程可以生成三个可执行文件(aaaa, op_make_data, op_memcached),假设选中aaaa,则点击编译按钮时,只会编译生成aaaa文件。选在Build All,则说明生成所有可执行文件。

    展开全文
  • char fileName[50]; char *dirName="E:/lung_data/005/GB_BMP4_5_1"; for(int i=0;i { sprintf_s(fileName,"%s//%d.bmp",dirName,i); }
  • Linux将多个文件生成.so文件

    千次阅读 2018-09-04 13:57:47
    本工程共有三个文件:myhello.c、myhello.h、Makefile myhello.c代码如下: #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;string.h&amp;amp;amp;gt; #...
  • so可以共多个进程调用,不同进程调用同一个so文件,所使用so文件不同;so原文件不需要main函数;实例,1.通过mysqlTest.c中的函数mysql(),生成一个libmysql.so链接#include&lt;stdio.h&gt; #include&...
  • 1、先打开一工程项目,如果DRIVER文件下的lcd.c、key.c、24c02.c和IIC.c这四个文件的源码不想给别人看到的话,就将这些文件进行打包成Lib 2、将除了这四个文件外的其它文件都移除掉,这里可以先备份一份原...
  • 使用ASN1C库处理.asn文件生成C代码解码和组码

    千次阅读 热门讨论 2019-03-15 17:56:31
    上文说到安装ASN1C库,这篇文章将会说一下怎样使用asn1c命令来将自定义的.asn文件生成.c文件,并对自定义的结构体进行解码和组码。 一、 建立.asn文件: RawCircle DEFINITIONS AUTOMATIC TAGS ::= BEGIN ...
  • C语言生成BMP文件

    千次阅读 2017-12-14 18:26:08
    文件格式由文件头、信息头、调色板数据、图像数据四部分构成。文件头区域包含文件的标识、文件大小和图像数据区偏移量等字段。信息头区域则包含图像宽度、高度、像素格式等信息。所有数据一般按小端字节序来存储,...
  • CMake生成多个.so文件

    千次阅读 2017-09-26 23:32:13
    用CMake来编译生成多个.so文件流程: 1、SDK Manager下载配置好CMake LLDB NDK这个就不需要详细讲了 2、配置完毕后重启一下,然后在app目录下面添加一个CMakeList.txt文件 #CMake的最小版本 cmake_minimum_...
  • 这里有我详细介绍使用asn1c命令来将自定义的.asn文件生成.c文件,并对自定义的结构体进行解码和组码。 https://blog.csdn.net/adgentleman/article/details/88577417 资源是所有文件的打包。
  • #cpp文件: #include “tdll.h” int panny(int i, int(*call_back)(int a, int b)) { int aa; aa = i * i; call_back(i, aa);...extern “C” _declspec(dllexport) int panny(int i, int(*call_back)(int a,
  • c语言生成静态.a和动态.so

    千次阅读 2015-07-27 09:35:27
    在windows下动态链接是以.dll后缀的文件,二在Linux中,是以.so作后缀的文件。 动态链接的好处就是节省内存空间。 1、Linux下创建动态链接 在使用GCC编译程序时,只需加上-shared选项即可,这样生成的...
  • C/C++库文件生成与使用

    千次阅读 2015-06-01 20:50:01
    为什么要用库文件? 为了保密(机密性) 提高代码重用率,提升可扩展性(灵活...将编译生成库文件所依赖的目标文件.o打包(这时候就是静态),在可执行文件的编译阶段,链接刚刚生成的静态(静态链接),这可执
  • C语言生成可执行文件的过程

    千次阅读 多人点赞 2021-02-15 11:07:05
    通过 gcc -E main.c -o main.i 执行c语言的预编译过程,生成main.o文件 让我们怀着敬畏的心情瞧一瞧生成的main.o文件是啥样子 (因为篇幅原因,上面截图只展示原文件的几十分之一的代码) 可以发现最下面是我们的源...
  • 添加相应的.h和.c文件 在.h中,对外开放的接口前 加注__declspec(dllexport) 调用DLL: 将.dll 和 .lib放在与Debug同级目录 项目右键-属性-VC++目录-目录-将.dll和.lib所在文件夹目录写入库目录中 ...
  • 最近因为阅读源码的工作,需要...链接阶段,需要把所有的obj文件(.o)链接起来,生成可执行程序,这过程可以链接其他外部的库文件。 有时候也有省略写法。 gcc -c test.c #源文件编译,生成 .o 文件 gcc -o tes...
  • C语言创建生成WAV音频文件

    千次阅读 2015-11-10 15:32:00
    对于WAV文件,首先明白WAV文件头的格式 引用博客http://blog.csdn.net/yzhouen/article/details/777459有详细说明。 所以我们一般定义一结构体来表示头 typedef struct { char chRIFF[4]; // "RIFF" 标志 ...
  • xcode生成静态库文件.a

    千次阅读 2018-10-30 15:49:26
    用xcode创建一静态库文件 选择ios-->Cocoa Touch Static Library 输入项目的名字,语言选择obj-c(我们不用obj-c,但是没有C/C++选项,步影响),点击next 选择一文件夹,create 可以把自动生成.h和.m...
  • 关于库生成的问题  我们通常把一些公用函数制作成函数,供其它程序使用。函数分为静态和动态两种。... 简单地说,静态是一目标文件的简单集合。因此,首先要解决目标文件。  第一
  • 假设编译交叉编译工具路径为dir1(arm-linux-androideabi-gcc-4.9 ),存放生成的.so文件的路径为dir2,test.cpp,依赖1.a,2.a,3.a这三静态文件库,Makefile文件应该怎么写
  • 如何合并多个*.so库文件

    千次阅读 2017-07-06 16:48:11
    多个静态库文件是可以合并成一个动态库文件的。 解决办法: 先把所有要打包的编译生成静态,然后使用如下命令把它们合并成一个*.so: gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,-
  • 资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。 #include <...#define N 1000000//一百万随机数组 int ma...
  • 在linux下生成可执行文件库文件

    千次阅读 2014-04-04 15:53:30
    在linux下生成可执行文件库文件  2012-04-06 10:27:22| 分类: c++|举报|字号 订阅 ...如果工程包含多个 .c 和 .h 那么在源文件名列表中只列出所有的 .c 文件 例:工程文件夹里有 
  • C语言调用GO语言生成C静态

    千次阅读 2018-09-28 16:17:05
    一开始看别人的例子,自己弄总是不成功,后来也是去GO语言社区看例子,找找规律,才把几自己没注意到的细(keng)节填起来了。 GO语言写一函数 cktest.go package main import ( "C" "...
  • 本人VS2015+WIN10测试环境 ,接下来介绍如何.c文件生成动态链接以及调用  生成动态链接 1.创建工程,选择WIN32控制台应用程序 2.点击下一步 3.选择DLL 空项目 完成 4.创建dm01.c 和dm01.h文件  5....
  • 动态*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态的编译和链接,总算搞懂了这之前一直不太了解得东东,这里做笔记,也为其它正为动态链接而苦恼的兄弟们提供一点帮助。...
  • 在构建一个新的Clion工程的时候,会自动生成一...如果我们需要在一个C++工程中构建多个主函数并生成多个可执行文件的话,我们就需要对CMakeLists.txt进行修改。具体步骤如下: (1)如果我们创建了两个主函数文件,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,273,198
精华内容 509,279
关键字:

多个c文件生成库