机试记不住头文件_永远也记不住的linux环境变量,库文件,头文件,交叉编译......

一、环境变量

1、node-v4.9.1-linux-armv7l

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/bin

export LD_LIBRARY_PATH=/usr/local/node-v4.9.1-linux-armv7l/lib:$LD_LIBRARY_PATH

添加到/etc/profile文件或者~/.bashrc文件

vi /etc/profie

export PATH=$PATH:/usr/local/node-v4.9.1-linux-armv7l/bin

export LD_LIBRARY_PATH=/usr/local/node-v4.9.1-linux-armv7l/lib:$LD_LIBRARY_PATH

source /etc/profile

vi ~/.bashrc

export PATH=$PATH:/usr/local/node-v4.9.1-linux-armv7l/bin

source ~/.bashrc

或者直接echo "export PATH=$PATH:/usr/local/node-v4.9.1-linux-armv7l/bin " >> ~/.bashrc

二、交叉编译,库文件,头文件

1、redis服务端

1)redis编译

wget http://download.redis.io/releases/redis-4.0.11.tar.gz

tar xvf redis-4.0.11.tar.gz

cd redis-4.0.11

#make MALLOC=libc

make MALLOC=Jemalloc

make install PREFIX=/usr/local/redis

sudo mkdir -p /usr/local/redis/etc

sudo cp redis.conf /usr/local/redis/etc

vi /etc/profile

export PATH=$PATH:/usr/local/redis/bin

source /etc/profile

/usr/local/redis/redis-server /usr/local/redis/etc/redis.conf

2)redis交叉编译

tar xvf redis-4.0.11.tar.gz

cd redis-4.0.11

export CC=arm-linux-gnueabihf-gcc

export CXX=arm-linux-gnueabihf-g++

export LD=arm-linux-gnueabihf-ld

export RAINLIB=arm-linux-gnueabihf-rainlib

export AR=arm-linux-gnueabihf-ar

export LINK=arm-linux-gnueabihf-g++

#make MALLOC=libc

make MALLOC=Jemalloc

make install PREFIX=_install

mkdir _install/etc

sudo cp redis.conf _install/etc

vi /etc/profile

export PATH=$PATH:/usr/local/xxx/bin

source /etc/profile

./redis-server /usr/local/xxx/redis/etc/redis.conf

2、redis c语言客户端

1)hiredis编译

make

make install PREFIX=_install

gcc -o example example.c -I ./_install/include/hiredis -L ./_install/lib -lhiredis

export LD_LIBRARY_PATH=/usr/local/hiredis/lib:$LD_LIBRARY_PATH

./example

2)hiredis交叉编译

export CC=arm-linux-gnueabihf-gcc

export CXX=arm-linux-gnueabihf-g++

export LD=arm-linux-gnueabihf-ld

export RAINLIB=arm-linux-gnueabihf-rainlib

export AR=arm-linux-gnueabihf-ar

export LINK=arm-linux-gnueabihf-g++

make

make install PREFIX=_install

arm-linux-gnueabihf-gcc -o example example.c -I ./_install/include/hiredis -L ./_install/lib -lhiredis

export LD_LIBRARY_PATH=/usr/local/hiredis/lib:$LD_LIBRARY_PATH

./example

-------------------------------------------------------------------------------------------------------------------------------

3、pjsip移植

1)alsa交叉编译

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabihf

tar xjvf alsa-lib-1.1.7.tar.bz2

cd alsa-lib-1.1.7/

./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --prefix=/home/dong/alsa-lib-1.1.7/_install

make

make install

2)pjsip交叉编译

./configure --prefix=/home/dong/pjproject-2.8/_install --host=arm-linux-gnueabihf CC=/usr/local/gcc-linaro-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --disable-libwebrtc CFLAGS=-I/home/dong/alsa-lib-1.1.7/_install/include LDFLAGS=-L/home/dong/alsa-lib-1.1.7/_install/lib

make dep

make

make install

pkg-config

autogen.sh

#!/bin/sh# Run this to generate all the initial makefiles, etc.

set-e

srcdir=`dirname $0`

test-z "$srcdir" && srcdir=.

DIE=0(test-f $srcdir/configure.ac) ||{echo -n "**Error**: Directory $srcdir does not look like the"

echo "top-level package directory"exit1}

(autoconf--version) < /dev/null > /dev/null 2>&1 ||{echo

echo "**Error**: You must have autoconf installed."

echo "Download the appropriate package for your distribution,"

echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"DIE=1}

(grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) &&{

(libtool--version) < /dev/null > /dev/null 2>&1 ||{echo

echo "**Error**: You must have libtool installed."

echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/"DIE=1}

}

(automake--version) < /dev/null > /dev/null 2>&1 ||{echo

echo "**Error**: You must have automake installed."

echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/"DIE=1NO_AUTOMAKE=yes

}

#if no automake, don't bother testing for aclocal

test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 ||{echo

echo "**Error**: Missing aclocal. The version of automake"

echo "installed doesn't appear recent enough."

echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/"DIE=1}if test "$DIE" -eq 1; thenexit1

fi

if test -z "$*"; then

echo "**Warning**: I am going to run configure with no arguments."

echo "If you wish to pass any to it, please specify them on the"

echo $0 "command line."

echo

fi

case $CC inxlc )

am_opt=--include-deps;;esacaclocalinclude="$ACLOCAL_FLAGS"

echo "Running libtoolize..."libtoolize--force --copyecho "Running gtkdocize..."gtkdocizeecho "Running aclocal $aclocalinclude ..."aclocal $aclocalincludeecho "Running autoheader..."autoheaderecho "Running automake --foreign -Wno-portability $am_opt ..."automake--add-missing --foreign -Wno-portability $am_optecho "Running autoconf ..."autoconf

conf_flags="--enable-maintainer-mode"

if test x$NOCONFIGURE = x; then

echo "Running $srcdir/configure $conf_flags $@ ..."$srcdir/configure $conf_flags "$@"\&& echo "Now type make to compile." || exit 1

else

echo "Skipping configure process."

fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核中,通常有许多头文件和源文件需要编译成.ko(内核对象)文件,以实现对特定功能或驱动程序的支持。 首先,头文件包含了函数和数据结构的声明,被其他源文件引用。这些头文件通常以.h文件扩展名结尾。源文件则包含了函数和数据结构的实现,通常以.c或.cpp文件扩展名结尾。 为了将多个头文件和源文件编译成.ko文件,使用Makefile是一个常见的方法。Makefile是一个文本文件,包含了一系列的规则,指定了文件的依赖关系以及编译和链接的命令。 Makefile中的规则通常包括以下几个步骤: 1. 定义目标文件(.ko文件)的名称和相关的编译选项。 2. 定义依赖关系,即指定哪些源文件头文件需要进行编译。 3. 定义编译命令,通常使用gcc或其他编译器执行编译操作。例如,可以使用gcc -c命令将源文件编译成目标文件(.o文件)。 4. 定义链接命令,将所有目标文件链接成一个.ko文件。例如,可以使用gcc -o命令将所有目标文件链接成一个.ko文件。 在执行Makefile时,会根据规则的定义逐步执行编译和链接的操作,生成最终的.ko文件。同时,Makefile还可用于指定其他操作,例如清除中间文件或执行其他自定义操作。 总而言之,将多个头文件和源文件编译成.ko文件可以通过使用Makefile来定义编译和链接的规则,并将其作为输入参数传递给编译器。Makefile中的规则会根据文件的依赖关系逐步执行编译和链接的操作,最终生成所需的.ko文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值