linux编译

编译 Linux 内核 时出现 Restart config 问题

匿名 (未验证) 提交于 2019-12-02 21:56:30
scripts / kconfig / conf -- silentoldconfig Kconfig * * Restart config ... * * * Enable the block layer * Enable the block layer ( BLOCK ) [ Y /?] y Support for large ( 2TB +) block devices and files ( LBDAF ) [ Y / n /?] ( NEW ) ^ Cscripts / kconfig / Makefile : 36 : recipe for target 'silentoldconfig' failed make [ 2 ]: *** [ silentoldconfig ] Interrupt Makefile : 541 : recipe for target 'silentoldconfig' failed make [ 1 ]: *** [ silentoldconfig ] Interrupt 出现以上问题时,一般是配置内核时,没有指定好架构和编译器。 解决方法:   在配置内核时, 指定好对应的架构和编译器, 在配置完成以后save。   在编译内核时,指定好配置时指定的架构和编译器,make 对应的镜像即可。 范例: 配置时: make ARCH = arm

Linux 编译找不到头文件

匿名 (未验证) 提交于 2019-12-02 21:56:30
Linux下使用gcc编译找不到头文件,但是查看 系统头文件件存放目录 /usr/local/include 发现头文件确实存在, 这是为什么呢? 这是因为Linux下的默认头文件路径 不包含 /usr/local/include, 默认包含的是/usr/include . /usr/local 是用来存放本机用户安装的一些 库的 .h文件或库文件。 但是很多开源代码编译时 默认以为头文件都在/usr/include , 导致找不到。 解决办法2种: 1 在/usr/include 下建立 软连接; 此方法还要建立对应lib的软连接, 麻烦。 2 在编译之前的代码时, 指定 安装路径/usr, 如果是用autoconf, 输入 ./configure --prefix=/usr 这样与后面代码的默认include路径保持一致。 来源:51CTO 作者: horsdy123 链接:https://blog.csdn.net/Horsdy123/article/details/101218715

C++在windows与linux下编译动态库

匿名 (未验证) 提交于 2019-12-02 21:56:30
一、.so与.dll比较 1、.so的单独编译链接 从网上找的一个例子: 头文件:so_test.h 三个.c文件:test_a.c test_b.c test_c.c //so_test.h #include "stdio.h" void test_a (); void test_b (); void test_c (); //test_a.c #include "so_test.h" void test_a () { printf ( "this is in test_a...\n" ); } //test_b.c #include "so_test.h" void test_a () { printf ( "this is in test_a...\n" ); } //test_c.c #include "so_test.h" void test_c () { printf ( "this is in test_c...\n" ); } 打开命令行,编译动态库:libtest.so gcc test_a . c test_b . c test_c . c - fPIC - shared - o libtest . so 动态库的链接 //test.c #include "so_test.h" int main () { test_a (); test_b (); test_c

Ubuntu 中linux 编译错误的(-)

匿名 (未验证) 提交于 2019-12-02 21:56:30
1.错误 compress.c:14:58: fatal error: zlib.h: No such file or directory compilation terminated. 解决:sudo apt-get install zlib1g-dev 2.错误 make[2]: bison: Command not found 解决:sudo apt-get install bison 3.错误 /bin/sh: flex: not found make[2]: *** [lib/conf-lex.c] Error 127 解决:sudo apt-get install flex 4.错误 lib/libsensors.so: undefined reference to `sensors_yylex' lib/libsensors.so: undefined reference to `sensors_yyin' lib/libsensors.so: undefined reference to `sensors_lex_error' lib/libsensors.so: undefined reference to `sensors_yylineno' collect2: ld returned 1 exit status make[2]: *** [prog

itop4412开发板-Linux内核的编译

匿名 (未验证) 提交于 2019-12-02 21:56:30
本篇文章基于itop4412开发板 Linux 内核源码在光盘“06_源码_uboot 和 kernel”目录下,如下图所示。 5.3.2.2 编译器 内核的编译器和 uboot 的编译器一样,参考“5.3.1.2 编译器”。 5.3.2.3 参数配置 内核的编译是组合式配置文件,基本的配置文件名是“config_for_android_YY_elite”, YY 表示用下表所示的参数替代。 5.3.2.4 编译生成内核镜像举例 这里以 SCP 1G 核心板为例编译 zImage 内核镜像,那么配置文件为 “config_for_android_scp_elite”。 将光盘“06_源码_uboot 和 kernel”目录下的压缩包 “iTop4412_Kernel_3.0_xxx.tar.gz”拷贝到 Ubuntu,然后解压,得到文件夹 “iTop4412_Kernel_3.0 ”,如下图所示。 进入文件夹“iTop4412_Kernel_3.0 ”,使用命令 “cp config_for_android_scp_elite .config”覆盖自带的配置文件,如下图所示。 如果用户要使用 5 寸屏幕,先要参考用户手册“5.5 支持 5 寸屏的内核补丁文件”,给内 核打补丁,然后使用命令“vim .config”,在文件中搜索关键词 “CONFIG_TOUCHSCREEN

Linux链接库三(C跟C++之间动态库的相互调用)

匿名 (未验证) 提交于 2019-12-02 21:56:30
http://www.cppblog.com/wolf/articles/74928.html http://www.cppblog.com/wolf/articles/77828.html http://www.jb51.net/article/34990.htm C和C++之间库的互相调用 extern "C"的理解: 很多人认为"C"表示的C语言,实际并非如此,"C"表示的是一种链接约定,只是因C和C++语言之间的密切关系而在它们之间更多的应用而已。实际上Fortran和汇编语言也常常使用,因为它们也正好符合C实现的约定。 extern "C"指令描述的是一种链接约定,它并不影响调用函数的定义,即时做了该声明,对函数类型的检查和参数转换仍要遵循C++的标准,而不是C。 2.extern "C"的作用: 不同的语言链接性是不同的,那么也决定了它们编译后的链接符号的不同,比如一个函数void fun(double d),C语言会把它编译成类似_fun这样的符号,C链接器只要找到该函数符号就可以链接成功,它假设参数类型信息是正确的。而C++会把这个函数编译成类似_fun_double或_xxx_funDxxx这样的符号,在符号上增加了类型信息,这也是C++可以实现重载的原因。 那么,对于用C编译器编译成的库,用C++直接链接势必会出现不能识别符号的问题,是的,需要extern "C

Linux下ITK的编译安装

匿名 (未验证) 提交于 2019-12-02 21:56:30
参考 https://itk.org/Wiki/ITK/Getting_Started/Build/Linux 1、首先需要更新cmake版本,因为最新版本的itk编译需要3.10.2以上版本的cmake。尝试使用apt-get进行更新,但由于库源的问题无法正常更新,因此从官网下载最新版本的cmake进行安装: sudo apt-get install build-essential wget https://github.com/Kitware/CMake/releases/download/v3.14.5/cmake-3.14.5.tar.gz tar xf cmake-3.14.5.tar.gz cd cmake-3.14.5 ./configure make sudo make install make --version 可以看到cmake已经更新至3.14.5版本 2、进行ITK文件的编译安装 sudo apt-get install git git clone https://itk.org/ITK.git 下载完成后在ITK文件夹中新建bin路径以进行编译 cd ITK mkdir bin cd bin 接下来进行编译: ccmake .. 按c选择默认配置,配置完成后按g生成makelist,完成后运行make文件进行编译: make -j4 sudo make

用linux编译并运行c文件

匿名 (未验证) 提交于 2019-12-02 21:56:30
@(用linux编译并运行c文件) vi 文件名.c 对于图形化的linux,需要右键桌面,在终端中打开,输入 vi 文件名.c 就创建了一个.c文件,并且在vim模式下进行编辑。 如果用不惯vim也可以在创建了.c文件之后直接双击打开在gedit下编辑,就像window系统下的txt编辑一样。 gcc 文件名.c -o 你需要执行文件名称 例如: 这条命令在桌面创建了一个可执行文件 然后用 java ./可执行文件的名字 例如: 文章来源: 用linux编译并运行c文件

简介make命令和makefile文件

匿名 (未验证) 提交于 2019-12-02 21:53:52
一、为什么要用到 make 命令和 makefile 文件   在 Linux 下编写一个程序,每次编译都需要在命令行一行一行的敲命令。如果是一个很小的程序还好说,命令不怎的复杂,编译速度也挺快,但是对于大型程序来说,这样无疑很麻烦,且不说可能会敲错命令,有时候仅仅改动了一个小地方,却需要将整个程序全部重新编译一遍,显然很浪费时间。Linux 提供了 make 命令来解决上述问题,它会 在必要时重新编译所有受改动影响的源文件 。同时,还提供了一个 makefile 文件,它告诉 make 命令如何构建应用程序。这里用一个简单的例子提前演示一下: /* hello.c */#include <unistd.h> #include <stdio.h> #include <stdlib.h> int main () { printf ( "hello world!\n" ); exit ( 0 ); } /* Makefile */ hello : hello . c gcc - o hello . s - S hello . c gcc - o hello . o - c hello . s gcc - o hello hello . o clean : - rm hello hello . s hello . o   这里提供了两段代码,第一段代码是一个简单的 HelloWorld

Linux下常用编译器gcc

匿名 (未验证) 提交于 2019-12-02 21:53:52
1.简介 GNU CC(简称gcc)是GNU项目中符合ANSI C标准的编译系统,能够编C、C++、Object C、java、Fortran、Pascal、Modula-3和Ada等多种语言,而且gcc是一个交叉平台编译器,能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。 gcc所支持后缀名解释 后缀名 所对应的语言 后缀名 所对应的语言 .c C原始程序 .s/.S 汇编语言原始程序 .C/.cc/.cxx C++原始程序 .h 预处理文件(头文件) .m Objective-C原始程序 .o 目标文件 .i 已经过预处理的C原始程序 .a/.so 编译后的库文件 .ii 已经过预处理的C++原始程序 ... ... 2.gcc编译流程解析 gcc的编译流程分为四个步骤: (1)预处理(Pre-Processing) 在这个阶段,编译器将对包含的头文件(#include)和宏定义(#define、#ifdef)等编译进文件中。 如:gcc -E hello.c -o hello.i (-E的作用是让gcc在预处理结束后停止编译过程) (2)编译阶段 在编译阶段,gcc首先要检测代码的规范性、是否错误等,在检测无误后将代码翻译成汇编语言。 如:gcc -S hello.i -o hello.s(