文件目录树结构如下:
-----------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
-----------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