精华内容
下载资源
问答
  • Linux C 多文件编译

    千次阅读 2017-11-02 22:09:56
    文件编译 将工程目录下的每个源文件都编译(通过编译器)成对应的目标文件(Linux平台下为.o文件,是二进制的,但无法执行) ,然后将所有的目标文件和库文件链接在一起(通过链接器)构成最终的可执行文件 注意:...

    多文件编译

    将工程目录下的每个源文件都编译(通过编译器)成对应的目标文件(Linux平台下为.o文件,是二进制的,但无法执行) ,然后将所有的目标文件库文件链接在一起(通过链接器)构成最终的可执行文件

    注意:每个源文件都是单独编译的

    例如:编译a.c文件(整个程序只有这一个源文件,多文件类比)

    1. 生成二进制目标文件(默认生成a.o的文件):

    (1) gcc a.c c  gcc  文件名 c;生成默认a.o文件)

     

    (2) gcc a.c c  a.ogcc 文件名 c 生成文件;注意这种方法只能指定生成和默认文件名一样的文件名,此处只能指定生成的文件名是a.o,而不能指定其他的文件名,如果指定其他的文件名,依然生成的是默认的文件名,所以这种方法繁琐而没有意义,所以一般就直接用第一种方法 )

     



    2. 链接生成可执行文件

    (1) gcc hello.o  (gcc 文件名 ;生成默认文件a.out)

     

    (2) gcc hello.o o a(gcc 文件名o 文件名;生成指定文件名的可执行文件

     

    上面是分开的编译链接步骤,其实编译器可以直接将他们一步执行到位,直接用命令:

    gcc a.c 或者gcc a.co a

    分别生成默认文件或者自定义文件名的可执行文件

    通过上面的原理掌握单源文件的编译,下面是多文件的编译过程

    有三个文件

     




     


     

     


     


    最简单的方法,当然也可以分步骤进行

    1. 先编译成二进制文件(一个个的编译,或者三个一起编译)

    2. 再生成可执行文件(一个个的编译,或者三个一起编译)

    或者

    add.h hello.h等带.h后缀的文件一般只写函数声明,add.c  hello.c main.c等.c文件只写函数,这样就相当于.h为函数声明,.c文件为源程序,然后再一起编译也是可以的,上述截图的简单方法相当于没有函数声明,直接将函数放在.h的文件中了,只是为了简单,并不符合编程规范。

    比较规范的做法是可以只编译.c文件的

    如:有下面5个文件

    可以值编译.c文件的


     

    展开全文
  • Linux文件编译.h或c文件

    千次阅读 2018-12-29 13:02:58
    1.在home中建立test文件,在test中建立myinclude,src文件。myinclude下建立myhead.cpp,myhead.h文件。src中建立main.cpp文件。如下图所示: 2.源代码如下: main.cpp: #include <iostream> #...

    1.在home中建立test文件,在test中建立myinclude,src文件。myinclude下建立myhead.cpp,myhead.h文件。src中建立main.cpp文件。如下图所示:

    2.源代码如下:

    main.cpp:

    #include <iostream>
    #include <myhead.h>
    using namespace std;
    int main()
    {
        //fun_head();
        cout<<"in main"<<endl;
        int x=100;
        int y=200;
        cout<<"sum : "<<sum(x,y);
        return 0;
    }
    

    myhead.h:

    #ifndef __myhead_h
    #define __muhead_h
    void  print();
    int sum(int a,int b);
    #endif

    myhead.cpp:

    #include "myhead.h"
    #include <iostream>
    using namespace std;
    void  print(){
        cout<<"in fun head"<<endl;
    }
    int sum(int a,int b){
        return a+b;
    }

    3.编译命令如下:

    提示:

    (1).必须先将myhead.cpp文件编译一下,生成myhead.o

    (2).如果我们在给要编译的代码加上自己的头文件,那么gcc或g++ 编译的时候 ,加上 -I 选项。

     

    4.运行结果如下:

    展开全文
  • 今天在linux编译C文件出现了一个错误implicit declaration of function ‘fork’:百度了一下,找到了解决方法,具体如下:原因:该函数所对应的头文件在C文件中没有被包含进来;解决方法:1.查找该函数对应的...

    今天在linux下编译C文件出现了一个错误implicit declaration of function ‘fork’:

    这里写图片描述

    原因是:该函数所对应的头文件在C文件中没有被包含进来;

    解决方法:

    1.查找该函数对应的头文件:

    在linux终端输入 man+函数名   (例如:man fork)
    

    这里写图片描述

    2.在要编译的C文件中添加头文件:

    这里写图片描述

    3.编译,问题得到解决。

    展开全文
  • Linux文件使用与编译

    千次阅读 2018-10-11 17:41:53
    Linux文件 静态库 在Linux中,以.a为后缀,如libtest.a 直接拷贝函数到二进制映像文件 只需要运行二进制文件,可以直接运行 共享库 在Linux操作系统中,以libxxx.so.x.x为格式命名 可执行文件在开始运行时将...

    介绍在Linux下使用静态库、共享库、动态库的方法。

    Linux库文件

    • 静态库
      • 在Linux中,以.a为后缀,如libtest.a
      • 直接拷贝函数到二进制映像文件
      • 只需要运行二进制文件,可以直接运行
    • 共享库
      • 在Linux操作系统中,以libxxx.so.x.x为格式命名
      • 可执行文件在开始运行时将函数从共享库文件中读出,从而间接引用
      • 好处是,当函数接口没变,实现改变时,不需要再次编译
    • 动态库
      • 动态加载库在指定位置加载的函数库
      • 可以减少内存开销

    库函数基本路径

    • /lib
      • 标准共享库和静态库
    • /usr/lib
      • 标准共享库和静态库
    • /usr/local/lib
      • 本地函数库

    库文件搜索顺序

    1. 首先在“LD_LIBRARY_PATH”环境变量所设置的路径下查找(一般都没有给此环境变量赋值)
    2. 搜索动态装载器在/etc目录下的缓存文件/etc/ld.so.cache(此文件由命令ldconfig创建更新)。
    3. ldd命令–查看到某可执行程序共享库清单

    创建静态库

    • libhello.c为要构建的库文件源文件,libhello.h为调用此库文件的头文件,usehello.c为测试程序。

      • 53922333150
    • 首先将所需要文件编译成目标文件

      • gcc -c libhello.c
        
    • 使用ar命令创建静态库

      • ar rc libhello.a libhello.o
        
    • 编译运行

      • gcc -o usehello_static usehello.c libhello.a
        
    • 53922368937

    创建共享库

    • 首先将所需要的库编译成目标代码,这里生成与位置无关,可以在任何地址被链接和装载:

      • gcc -fPIC -Wall -g -c libhello.c
        
    • 使用-shared来创建共享库

      • gcc -g -shared -Wl,-soname,libhello.so.1.0 -o libhello.so.1.0 libhello.o
        
      • 这里的so.1.0表示对应的完整版本号,具体可参考这里

    • 创建soname连接:

      • ln -sf libhelloso.1.0 libhello.so
        
      • 这里创建一个链接,只是为了方便以后版本更新时,只需要更改链接的路径,不改变编译代码

    • 编译并连接引用库文件

      • gcc -Wall -g -c usehello -o usehello.o
        gcc -g -o usehello_dynamic usehello.o -L ./ -lhello //连接引用库文件
        
      • 其中,-L表示搜索路径,./表示搜索当前路径

      • -lhello

        • 会自动在-l前变为lib,加上.so,变为libhello.so
    • 运行,需要添加当前目录pwd到环境变量中

      • LD_LIBRARY_PATH=$(pwd) ./usehello_dynamic 
        
    • 如果希望在使用连接器时不使用-Ldirectory标识就可以查找到该库,则可以采用以下方式之一:

      • 把此库拷贝到/usr/lib或者/lib文件夹中,或者在此两个文件夹任意一个中创建一个到该库的快捷方式,并命名为libname.so
      • 如果库所在路径没有在/usr/lib和/lib文件夹下,需要将该路径添加到文件“/etc/ld.so.conf”中,每一行增加一个路径,完成以上设置后,然后运行ldconfig命令更新库信息。

    动态库

    • 在Linux中,动态库的文件格式跟共享库没有区别,主要区别在于共享库是运行时加载。

    • 有专门的一组API用于完成打开动态库,查找符号,处理出错,关闭动态库等功能。

      • dlopen
      • dlerror
      • dlsym
      • dlclose
    • 使用示例

      • 53924215058

    展开全文
  • linux环境下编译C++文件

    千次阅读 2017-12-14 15:41:49
    最近需要将代码上传到...稍微学习了一下ubuntu环境下的C++文件编译方式。单个源文件生成可执行程序//随便写个简单的程序: /*test.cpp*/ #include int main(int argc,char *argv[]) { std::cout , world" << std:
  • Linux下Make编译结果输出到文件

    万次阅读 2017-05-18 14:20:39
    Linux下Make编译结果输出到文件
  • Linux下C文件编译so文件

    千次阅读 2017-01-19 16:24:24
    首先,检查GCC是否安装 gcc -v 能打印出gcc版本信息,就能直接编译了。编译: gcc -o libtest.so -shared -fPIC test.c
  • Linux内核编译流程(Menuconfig图形化方式)Menuconfig配置内核原理:在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析...
  • 下载,编译内核相关知识已经自学完毕,但是在修改文件系统的时候出现了问题 1.老师对系统的选择我没有太多异议,而且适应了suse里的相关操作 2.已经在内核源代码(Linux-3.11-6-4)的/fs/ext4文件夹下找到了ext4...
  • linux下Qt编译库so文件

    2015-07-17 09:01:40
    qt在linux编译后会产生四个so文件,so、so.1、so.1.0、so.1.0.0, 调用这个库时好像找的是so.1这个库。 问题1:如何让调用者找的是so这个库,然后再连接其他到实体库。 问题2:如何编译后只生成一个库文件,只要so....
  • linux 系统下编译cpp文件

    千次阅读 2017-05-10 00:25:36
    假如我们有一个写好的 demo.cpp 函数,我们在 linux 系统下如何编译程序并运行出结果呢? 我们可以执行命令: g++ demo.cpp -o demo 生成可执行程序demo,然后再执行命令: ./demo 即可以执行程序了。 ...
  • 如何编译Linux内核文件

    千次阅读 2018-07-28 10:10:15
    如何编译Linux内核文件 参考:朱有鹏Uboot的全集 前言:我们的Linux内核文件动则数万个文件,很多个子文件夹,当然是使用Makefile管理了,但是是不是真的仅仅只是make一下就可以了呢?答案是不可能的,因为Linux...
  • stm32代码在ubuntu linux使用gcc编译的链接文件 link.ld 具体参考博客: http://blog.csdn.net/embbnux/
  • linux驱动 例子 自己的驱动, 入门, 加入自己驱动,实测通过,生成模块文件 ko文件,如果在linux内核中编译自己驱动
  • Linux下反编译.apk 文件

    千次阅读 2015-03-19 15:50:10
    Linux下反编译.apk 文件   1、为什么要反编译.apk 文件,我又是用来干什么的? 反编译安卓程序 .apk 后,可以得到程序的源码和图片、XML配置等文件。这段时间在碰到一个问题,要混淆android代码,混淆后想看看...
  • c文件:project.c方法一//预编译,生成已编译通过的C原始程序 *.i gcc -E project.c -o project.i //编译,生成汇编语言原始程序 *.s gcc -S project.i -o project.s //链接,生成可执行程序 gcc -o project.exe ...
  • Linux学习之编译运行.c(C语言)文件

    千次阅读 2018-08-23 21:56:21
    Linux命令行界面下,创建文件hello.c,进入vim编辑器,编辑一个简单的C语言文件  分解C语言文件执行过程,要经过预编译编译、汇编、连接四个步骤后才能执行, 预编译:gcc -E hello.c -o hello.i 先将.c...
  • linux命令行中编译和运行java文件

    万次阅读 2016-03-03 22:46:41
    同时加载编译多个jar包和java文件在个人平常使用或者当我们把代码部署到linux服务器上的时候,我们经常需要通过命令行编译和运行java文件,网上关于这个的方法大多是通过javac -cp filePath/jarName.jar javaName....
  • Linux下gcc编译c程序生成可执行文件的过程

    万次阅读 多人点赞 2018-10-23 11:29:42
    Linux下gcc编译c文件生成可执行文件 一、准备 hello.c 文件 1、在当前目录下新建c文件 $:vim hello.c 2、按i进入编辑模式。按esc退出编辑模式,输入源代码 #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt...
  • Linux Chromium源码编译

    千次阅读 2018-04-12 13:53:06
    LInux Chromium源码编译 LInux下Chromium采用gn+ninja编译方式。老版的gyp方式已被抛弃,并且在默认情况下(is_clang 标志位为true),会使用clang编译器。 GN通过Chromium源码中的GN文件,在编译目录(如out/...
  • linux命令行中编译和运行多个java文件
  • Linux下gcc编译生成动态链接库*.so文件并调用它 gcc -c test.c将生成test.o的目标文件 gcc -o app test.c将生成可执行程序app 动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的...
  • Linux下GCC编译C语言

    万次阅读 多人点赞 2018-06-12 20:49:50
    Linux下GCC编译C语言Linux下GCC编译C语言 1.创建一个.C文件 # vi/vim name.c 2.编译name.c文件,生成可执行文件 # gcc name.c 3.执行文件,在默认情况下产生的可执行程序名为a.out # ./a.out 4.通常可以...
  • 查看Linux系统内核编译选项

    千次阅读 2016-01-28 21:28:03
    查看Linux内核编译配置有时候我们需要查看Linux系统的内核是否在编译的时候的编译选项,从而确定某个模块是否已经加入到内核以及参数设置等等。 方法有两种: # zcat /proc/config.gz # cat /boot/config-$(uname -r...
  • Linux编译C文件

    千次阅读 2010-11-23 13:54:00
    熟悉了Windows平台下编译一个C++工程后,你是否会提出这样一个问题:在Linux平台下又如何编译一个C++工程呢? <br /> 希望本文能给正在学习或想学习Linux C++开发的你起到抛砖引玉的作用。 <br /> 首先...
  • linux内核模块编译 两种编译

    万次阅读 2018-04-09 18:51:27
    linux内核模块的编译方法有两种: 1.放入linux内核源码中编译。 2.独立编译模块。 (1)放入linux内核源码中编译 这里先了解Kconfig和Makefile的作用 Kconfig:对应内核模块的配置菜单。 Makefile:对应内核...
  • 文章目录GO Window下编译Linux可执行文件1、Note2、交叉编译方法window 下编译 linuxlinux编译 window3、参考 Go-交叉编译-在window中编译linux 可执行文件 1、Note 在window使用 CMD 交叉编译 powershell: 无法...
  • py文件编译为pyc文件(linux)

    千次阅读 2019-04-25 16:38:13
    参考:http://blog.sina.com.cn/s/blog_5e8a23f90102w5sc.html 参考:... 两种方法,一种是写个脚本,一种是直接采用命令行. 1. 脚本: #单文件编译 import py_compile py_compile.compile(r'te...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 742,309
精华内容 296,923
关键字:

linux查看文件编译

linux 订阅