利用autotools工具开发一个简易的多线程arm linux程序

文件目录树结构如下:
-----------include
                   -------------thread.h
-----------lib
                   -------------thread.c
-----------main.c
/* thread.h */
void thread(void);

/* thread.c */
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include "../include/thread.h"
void thread(void)
{
    int i;
    for(i=0;i<3;i++)
        printf("This is a pthread. \n");
}

/* main.c */
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include "include/thread.h"
int main(void)
{
    pthread_t id;
    int i,ret;
    ret = pthread_create(&id,NULL,(void* )thread,NULL);
    if(ret)
    {
        printf("Create pthread error! \n");
        exit(1);
    }
    for(i=0;i<3;i++)
        printf("This is the main process. \n");
    pthread_join(id,NULL);
    return(0);
}

(1)在autoMutithread目录下新建Makefile.am:
SUBDIRS=lib
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
main_SOURCES=main.c
main_LDADD=./lib/libthread.a -lpthread
在autoMultithread/lib目录下新建Makefile.am:
noinst_LIBRARIES=libthread.a
libthread_a_SOURCES=thread.c ../include/thread.h

(2)ruyueling@ruyueling-K52Dr:~/my project/C Project/autoMultithread$ autoscan
生成的configure.scan该内容为:
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.63])
#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(main,1.0)
AM_INIT_AUTOMAKE
AC_PROG_RANLIB
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile
                 lib/Makefile])
AC_OUTPUT
将configure.scan改为configure.ac

(3)在SHELL中依次执行:
aclocal
autoconf
autoheader
automake --add-missing

(4)生成Makefile
ruyueling@ruyueling-K52Dr:~/my project/C Project/autoMultithread$ CC=arm-linux-gcc ./configure --build=i686-pc-linux --host=arm-linux
"--build=BUILD" 指定在哪个系统上面编译这个包。
"--host=HOST" 指定在哪个系统上面运行应用程序和库文件


(5)make

(6)将生成的main可执行程序拷贝到开发板,以OK6410为例,嵌入式系统中终端cd到该目录,执行./main
将打印出多线程运行结果

补充说明:
(1)如果main.c中不包含stdlib.h,则编译时出现:warning:incompatible implicit declaration of built-in function 'exit'
(2)如果编译器安装目录在比如/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
讲编译器拷贝到/usr/bin 下,方便编译
(3)还要注意的是在普通编译时编译参数 -l pthread
而在file_LDADD=中需写成-lpthread
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值